Doppio vincolo generico sulla classe in Java: estende ConcreteClass & amp; io
-
02-07-2019 - |
Domanda
Esiste un modo per definire un vincolo generico in Java che sarebbe analogo al seguente constratint generico C #?
class Class1<I,T> where I : Interface1, Class2 : I
Sto provando a farlo in questo modo:
class Class1<I extends Interface1, T extends I & Class2>
Ma il compilatore si lamenta della "Classe2" parte: il parametro type non può essere seguito da altri limiti.
Soluzione
Il modo più semplice che posso vedere per risolvere il codice Java è rendere Class2 un'interfaccia.
Non è possibile vincolare un parametro di tipo per estendere più di una classe o parametro di tipo. Inoltre, non puoi usare super qui.
Altri suggerimenti
Questo codice viene compilato qui bene:
interface Interface1 {}
class Class2 {}
class Class1<I extends Interface1, T extends Class2 & Interface1> {}
Perché è necessario il tipo I quando si assume comunque solo Interfaccia1 ? (non saprai nulla di più nella tua classe su I di quanto non si estenda Interfaccia1 )