Prima di tutto, non nominarlo Object
. Object
è la classe di base implicita di Java per tutte le altre classi. Tecnicamente, potresti nominare la tua interfaccia Object
se non la inserisci nel pacchetto java.lang
, ma sarebbe altamente fuorviante.
Per fornire diversi tipi di ritorno per getId()
in ObjectA
e ObjectB
, l'uso dei farmaci generici:
public interface MyObject<T> {
T getId();
String getName();
}
public class ObjectA implements MyObject<Integer> {
@Override
public Integer getId() {
return 0;
}
@Override
public String getName() {
return "A";
}
}
public class ObjectB implements MyObject<Long> {
@Override
public Long getId() {
return 0;
}
@Override
public String getName() {
return "B";
}
}
Se getId()
restituisce sempre un numero, si potrebbe anche definire come MyObject
MyObject<T extends Number>
. Si noti che non è possibile utilizzare i tipi nativi int
e long
con generici; devi usare i tipi scatolati Integer
e Long
.
fonte
2015-07-16 13:13:14
Grazie Robin, questo è utile. La parola chiave 'Oggetto' era solo per esempio –
Possiamo migliorare questa soluzione aggiungendo l'interfaccia pubblica MyObject 'come ci aspettiamo che il tipo' T' sia un numero. –
@ piotr.wittchen Hai ragione; dai un'occhiata all'ultimo paragrafo della mia risposta. ;) –