Non è possibile usa il tipo generico (T
nel tuo caso) con dei limiti quando dichiari una variabile.
Deve essere un carattere jolly (?
) oppure utilizzare solo il tipo generico completo della classe.
E.g.
// Here only extends is allowed
class My< T extends SomeInterface >
{
// If using T, then no bounds are allowed
private Collection<T> var1;
private Collection< ? extends SomeInterface > var2;
// Cannot have extends and super on the same wildcard declaration
private Collection< ? super MyClass > var3;
// You can use T as a bound for wildcard
private Collection< ? super T > var4;
private Collection< ? extends T > var5;
}
In alcuni casi, si può stringere la dichiarazione aggiungendo il parametro più generico per una classe (o metodo) e l'aggiunta di un balzo in quel parametro particolare:
class My <
T extends MyClass<I>,
I extends SomeInterface
>
{
}
fonte
2013-01-02 20:29:38
Per motivi di record, Angelika Langer offre un interessante punto di vista in [questo articolo] (http://angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ107) sul perché * limiti inferiori * sul tipo di classe i parametri praticamente non ha senso. –