2008-09-25 4 views
11

Gibt es eine Möglichkeit, eine generische Integritätsbedingung in Java zu definieren, die der folgenden generischen C# -Konstante analog wäre?Doppelte generische Einschränkung für die Klasse in Java: erweitert ConcreteClass & I

class Class1<I,T> where I : Interface1, Class2 : I 

Ich versuche, es so zu tun:

class Class1<I extends Interface1, T extends I & Class2> 

Aber der Compiler beschwert sich über die „Klasse 2“ Teil: Typ Parameter kann nicht durch andere Grenzen eingehalten werden.

+0

'extends'? Meinst du "erweitert"? - Auch die C# -Zeile stellt keine Einschränkung für den T-Typ dar, vielleicht hast du einen Fehler gemacht? – BrainSlugs83

+0

Dies ist ein Tippfehler und das ist Java. – axk

Antwort

4

Die einfachste Art, wie ich zur Lösung des Java-Code sehen kann, ist eine Schnittstelle zu machen Class2.

Sie können keinen Typparameter einschränken, der mehr als einen Klassen- oder Typparameter erweitert. Außerdem kannst du Super hier nicht verwenden.

5

Dieser Code kompiliert hier fein:

interface Interface1 {} 

class Class2 {} 

class Class1<I extends Interface1, T extends Class2 & Interface1> {} 

Warum brauchen Sie die ich dort geben, wenn Sie nur Interface1 sowieso übernehmen? (Sie werden nichts mehr in der Klasse kennen ich als es erstreckt Interface1)

+3

Der Punkt ist, dass "T erweitert Class2 & I" nicht "T erweitert Class2 & Interface1", wenn Sie konkrete Klassen für beide Parameter angeben – axk