Boxe et unboxing sur Android
Question
Je développe une application Android.
Je l'interface suivante:
public interface IDBAdapter {
public enum Table {
...
}
public int insertItem(Table table, Object item);
public boolean removeItem(Table table, long rowIndex);
public Cursor getAllItemsCursor(Table table);
public Cursor setCursorToItem(Table table, long rowIndex);
public void getItem(Table table, long rowIndex);
public boolean updateItem(Table table, long rowIndex, Object item);
}
Pour chaque table définie sur enum Table
, ce sera un objet qui représente cette table.
Mon problème est sur le paramètre Object item
. Je vais devoir unbox chaque élément chaque fois que j'appelle une de ces méthodes et je ne sais pas si ce sera très lent pour Android.
Savez-vous une meilleure solution? Je ne veux pas créer un dbAdapter pour chaque table parce que je dois partager objet SQLiteDatabase entre eux.
Mise à jour:
Voici un exemple d'objet que je dois passer à ces méthodes:
public class GameDescriptionData {
public int gameId;
public char[] language = new char[5];
public String name;
public String description;
public GameDescriptionData() {
}
}
Merci.
La solution
Vous avez pas dit quel genre de valeurs que vous mettez dans les tables. À moins que vous insérez des valeurs primitives, il n'y aura pas de boxe impliqué. Par exemple, si item
est une référence String
, qui n'a pas besoin de boxe, car il est déjà une référence.
Je vous suggère d'essayer votre conception idéale avant de le changer pour des raisons de problèmes de performance. Il est vrai que je ne suis pas tout à fait convaincu que c'est un grand dessein pour commencer, mais il est difficile de dire sans en savoir plus au sujet de votre application.
Autres conseils
Je suggère le modèle de stratégie pour impl les soins distincts pour chaque élément attendu.
Définir DBAdapterStrategyFactory
qui stockera toutes les stratégies ensemble en fonction de leur type de classe. De cette façon, lors de l'appel des opérations sur Object item
vous pouvez tirer cette stratégie de l'usine et partager la plupart du code IDBAdapter
.