Bonjour,
J'ai un petit problème de conception dont je n'arrive pas à me sortir.
J'ai une classe abstraite définie comme suit (simplifiée pour l'exemple) :
J'aimerais ensuite contruire une collection abstraite à partir de cette classe abstraite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public abstract class TableItem { @com.google.gson.annotations.SerializedName("id") public long mId; @Override public boolean equals(Object o) { if(o instanceof TableItem) { TableItem item = (TableItem)o; return item.mId == this.mId; } return false; } public abstract JsonElement toJsonElement(); public abstract TableItem fromJsonElement(JsonElement je) }
La méthode "add" est fausse : En effet, il est impossible d'instancier TableItem dans la mesure où cette classe est abstraite. J'ai donc essayé de voir s'il était possible de déclarer la méthode fromJsonElement static pour l'appeler sans instancier la classe, mais c'est interdit en Java. Je tourne donc un peu en rond.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public abstract class TableItemCollection extends ArrayList<TableItem> { private static final long serialVersionUID = 8571119192423778503L; public TableItemCollection() { } public void add(JsonElement e) { TableItem item = new TableItem(); this.Add(item.fromJsonElement(je)); } public boolean exists(TableItem item) { for(TableItem i : this) { if(item.equals(i)) { return true; } } return false; } public TableItem getItem(long id) { for(TableItem i : this) { TableItem item = (TableItem)i; if(item.mId == id) { return item; } } return null; } }
Cela veut-il dire que je suis obligé d'implémenter une collection pour chaque type dérivé de TableItem ?
JE.
Partager