2012-07-26 30 views
7

Esto puede sonar como una pregunta extraña, pero ¿cómo se puede definir un genérico que tiene que extender una clase Y para implementar una interfaz? Actualmente estoy teniendo una función genérica con el siguiente prototipo:Clase genérica e implementa interfaz

public static <E extends Enum<E>> List<E> buildEnumList(Class<E> enumClass) 

Esto funciona igual de intencionado. Mi problema ahora es que quiero restringir aún más las clases pasables a las que son enumeraciones e implementar una interfaz específica Readable (no en java.lang). Desde un genérico utiliza la misma palabra clave extends para indicar que se debe implementar una interfaz, no veo ninguna manera de conseguir el siguiente comportamiento seudo:

public static <E extends Enum<E> implements Readable> List<E> buildLexicographicalEnumList(Class<E> enumClass) 

Respuesta

13

Puede utilizar & para indicar que E también debe implementar una interfaz:

public static <E extends Enum<E> & Readable> List<E> buildLexicographicalEnumList(Class<E> enumClass) { 
+0

También se puede usar una coma para separarlos. – corsiKa

+0

@corsiKa También lo pensé, pero no puedo encontrarlo [en el JLS] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.4). Aunque lo hace para compilar. – assylias

+0

Ahora me preocupa que hagan dos cosas diferentes ... :-( – corsiKa

Cuestiones relacionadas