In realtà, puoi fare quello che vuoi. Se vuoi fornire più interfacce o una classe più interfacce, devi avere un carattere jolly simile a questo:
<T extends ClassA & InterfaceB>
Vedi il tutorial di Generics su sun.com, in particolare la sezione Parametri del tipo associato , nella parte inferiore della pagina. Puoi effettivamente elencare più di un'interfaccia se lo desideri, usando & InterfaceName
per ognuna di cui hai bisogno.
Questo può diventare arbitrariamente complicato. Per dimostrare, vedere la dichiarazione JavaDoc di Collections#max
, che (racchiusa in due righe) è:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
perché così complicato? Come detto nelle FAQ di Java Generics: per preservare la compatibilità binaria .
Sembra che questo non funzioni per la dichiarazione di variabili, ma funziona quando si pone un limite generico su una classe. Pertanto, per fare ciò che desideri, potresti dover saltare alcuni cerchi. Ma puoi farlo. Puoi fare qualcosa del genere, ponendo un limite generico alla tua classe e quindi:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
per ottenere variable
quello ha la restrizione che desideri. Per ulteriori informazioni ed esempi, consulta la pagina 3 di Generics in Java 5.0 . Nota, in <T extends B & C>
, il nome della classe deve venire prima e le interfacce seguono. E ovviamente puoi elencare solo una singola classe.