2012-07-26 2 views
7

Może to brzmieć jak dziwne pytanie, ale jak zdefiniować rodzajowy, który musi rozszerzyć klasę I, aby zaimplementować interfejs? Mam obecnie funkcję ogólną z następującym prototypem:Ogólna klasa rozszerzająca ORAZ implementuje interfejs

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

Działa to tak samo. Mój problem polega na tym, że chcę jeszcze bardziej ograniczyć dozwolone klasy do tych, które są wyliczone i zaimplementować określony interfejs Readable (nie w java.lang). Ponieważ ogólna używa tego samego słowa kluczowego extends, aby wskazać, że powinien implementować interfejs, ja nie widzę żadnego sposobu, aby uzyskać następujące pseudo zachowanie:

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

Odpowiedz

13

Można użyć & aby wskazać, że E musi implementować interfejs:

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

Do oddzielenia można również użyć przecinka. – corsiKa

+0

@corsiKa Tak też myślałem, ale nie mogę go znaleźć [w JLS] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.4). Chociaż ma to na celu kompilację. – assylias

+0

Teraz obawiam się, że faktycznie robią dwie różne rzeczy ... :-( – corsiKa