2008-09-25 10 views
11

Czy istnieje sposób zdefiniowania ogólnego ograniczenia w Javie, które byłoby analogiczne do następującego ogólnego konwertera C#?Podwójne ogólne ograniczenie klasy w Javie: extends ConcreteClass & I

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

Staram się zrobić to tak:

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

Ale kompilator narzeka na „class2” część: parametr typu nie mogą być stosowane przez inne granice.

+0

'rozszerza'? Czy chodziło Ci o 'extends'? - również linia C# nie nakłada żadnych ograniczeń na typ T, być może popełniłeś błąd? – BrainSlugs83

+0

To jest literówka i to jest Java. – axk

Odpowiedz

4

Najprostszym sposobem widzę rozwiązywania kod Java jest, aby Class2 interfejs.

Nie można ograniczyć parametru typu, aby rozszerzyć więcej niż jeden parametr klasy lub typu. Co więcej, nie możesz używać tutaj super.

5

Ten kod kompiluje się tu dobrze:

interface Interface1 {} 

class Class2 {} 

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

Dlaczego potrzebne wpisuję tam, kiedy tylko przypuszczać Interface1 tak? (Nie wiem nic więcej w swojej klasie o I niż rozciąga Interface1)

+3

Chodzi o to, że "T rozszerza klasę 2 i I", a nie "T rozszerza klasę 2 i interfejs1", gdy określane są konkretne klasy dla obu parametrów – axk

Powiązane problemy