Sto cercando di capire come ottenere i generici per saltare attraverso i cerchi.Generics Puzzler
ho:
interface Root { }
interface Middle extends Root { }
class Type implements Root { }
E molti "sottotipo" classi:
class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...
Quello che voglio è quello di dichiarare una classe con due parametri di tipo T
e S
, dove T
è vincolato da Type
e S
è vincolato a T
e Middle
.
Non riesco a vedere un modo con generici per garantire che S
si estenda T
E implementa Middle
. Quello che voglio è qualcosa di simile:
class Handler<T extends Root, S extends T, S extends Middle>;
o
class Handler<T extends Root, S extends <T extends Middle>>;
Ma naturalmente non sono legali. Forse c'è della magia che mi manca?
Non puoi farlo. È possibile avere più limiti, ma devono essere 0-1 Class e più interfacce. Non puoi avere un tipo generico in una situazione a più vincoli. Sospetto che questa restrizione sia stata mantenuta perché consentire che il tipo in più limiti creerebbe molta complessità al correttore di sintassi, per quello che è un raro caso limite. – BevynQ
correlati: http://stackoverflow.com/a/13261667/697449 –
Grazie. Anche quello è stato letto, ma ho pensato che fosse possibile che mi mancasse qualcosa nelle specifiche. Casts it is! –