En realidad, usted puede haga lo que quiera. Si desea proporcionar múltiples interfaces o una clase más interfaces, tiene que tener su comodín ser algo como esto:
<T extends ClassA & InterfaceB>
Véase el Generics Tutorial en sun.com, específicamente la sección Bounded Type Parameters, en la parte inferior de la página . De hecho, puede enumerar más de una interfaz si lo desea, utilizando & InterfaceName
para cada uno que necesite.
Esto puede complicarse arbitrariamente. Para demostrar, consulte la declaración de JavaDoc Collections#max
, que (envuelto en dos líneas) es:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
qué tan complicado? Como se dijo en las preguntas frecuentes de Java Generics: To preserve binary compatibility.
Parece que esto no funciona para la declaración de variables, pero funciona al poner un límite genérico en una clase. Por lo tanto, para hacer lo que quieras, es posible que tengas que saltar unos pocos aros. Pero puedes hacerlo. Se puede hacer algo como esto, poniendo un límite genérico en su clase y luego:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
para obtener variable
que tiene la restricción que desea. Para obtener más información y ejemplos, consulte la página 3 de Generics in Java 5.0. Tenga en cuenta que en <T extends B & C>
, el nombre de clase debe ser lo primero, y las interfaces siguen. Y, por supuesto, solo puede enumerar una sola clase.
¿Pero por qué tengo que lanzar el objeto a T al devolverlo? –
@BernhardV: Debe proporcionar más información antes de que pueda responderla. ¿En qué situación necesitas lanzar? – Eddie
Esto es útil. Vale la pena mencionar que la clase _debería ser lo primero, no se puede decir ''. –
EricS