Na verdade, você pode fazer o que quiser. Se você deseja fornecer várias interfaces ou uma classe mais interfaces, você deve ter seu curinga parecido com este:
<T extends ClassA & InterfaceB>
Consulte o Tutorial sobre genéricos em sun.com, especificamente a seção Parâmetros de tipo limitado , na parte inferior da página. Você pode realmente listar mais de uma interface, se desejar, usando & InterfaceName
para cada uma que precisar.
Isso pode ser arbitrariamente complicado. Para demonstrar, consulte a declaração JavaDoc de Collections#max
, que (agrupada em duas linhas) é:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
por que tão complicado? Como dito nas Perguntas frequentes sobre Java Generics: Para preservar a compatibilidade binária .
Parece que isso não funciona para declaração de variáveis, mas funciona ao colocar um limite genérico em uma classe. Assim, para fazer o que quiser, você pode ter que pular algumas voltas. Mas você consegue fazer isso. Você pode fazer algo assim, colocando um limite genérico em sua classe e depois:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
para obter variable
isso tem a restrição que você deseja. Para obter mais informações e exemplos, consulte a página 3 de Genéricos em Java 5.0 . Observe que, em <T extends B & C>
, o nome da classe deve vir primeiro e as interfaces seguem. E, claro, você pode listar apenas uma única classe.