Двойное общее ограничение на класс в Java: расширяет ConcreteClass и I - PullRequest
11 голосов
/ 25 сентября 2008

Есть ли способ определить универсальное ограничение в Java, которое было бы аналогично следующему универсальному ограничению C #?

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

Я пытаюсь сделать это так:

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

Но компилятор жалуется на часть "Class2": за параметром Type не могут следовать другие границы.

Ответы [ 2 ]

5 голосов
/ 25 сентября 2008

Этот код компилируется здесь нормально:

interface Interface1 {}

class Class2 {}

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

Зачем вам нужен тип I , если вы все равно предполагаете только Interface1 ? (вы не узнаете ничего больше в своем классе о I , чем это расширяется Interface1 )

4 голосов
/ 25 сентября 2008

Самый простой способ разрешения кода Java - это сделать Class2 интерфейсом.

Нельзя ограничить параметр типа расширением более одного класса или параметра типа. Кроме того, вы не можете использовать супер здесь.

...