2012-07-26 23 views
7

Questa potrebbe sembrare una domanda strana, ma come è possibile definire un generico che deve estendere una classe AND per implementare un'interfaccia? Im attualmente ha una funzione generica con il seguente prototipo:Interfaccia generica di classe E di estensione

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

Questo funziona altrettanto come previsto. Il mio problema ora è che voglio limitare ulteriormente le classi passabili a quelle che sono enumerate e implementare un'interfaccia specifica Readable (non quella in java.lang). Dal momento che un generico usa la stessa parola chiave extends per indicare che esso dovrebbe implementare un'interfaccia, non vedo alcun modo per ottenere il seguente comportamento pseudo:

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

risposta

13

È possibile utilizzare & per indicare che E deve anche implementare un'interfaccia:

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

È inoltre possibile utilizzare una virgola per separarli. – corsiKa

+0

@corsiKa L'ho pensato anch'io ma non riesco a trovarlo [nella JLS] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.4). Anche se lo fa per compilare. – assylias

+0

Ora sono preoccupato che in realtà facciano due cose diverse ... :-( – corsiKa

Problemi correlati