Как уже отмечалось, это:
class MyOtherClass <T extends OtherInterface & SomeInterface>
определяет многократно ограниченный тип параметра. Если вы используете MyOtherClass
, вы должны указать ему тип, который реализует как OtherInterface
, так и SomeInterface
.
Однако это делает не определить многократно ограниченный тип параметра:
class MyClass <T extends OtherInterface, SomeInterface>
Он определяет общий с двумя параметрами типа. Первый должен реализовать OtherInterface
. Второй может быть любым. Это так же, как
class MyClass <T extends OtherInterface, U>
за исключением того, что вы назвали его SomeInterface
вместо U
. (Соглашение состоит в том, что параметры типа обычно представляют собой одиночные буквы верхнего регистра, или иногда буквы верхнего регистра, а также цифру или короткий идентификатор верхнего регистра. Но компилятору все равно. Он не будет смотреть на форму идентификатор, чтобы понять, что вы на самом деле означали его как интерфейс.)
Обратите внимание, что в приведенном примере, 'class MyClass', OP определил два общих параметра. Первый называется 'T' и связан с' OtherInterface', а второй (смутно) называется 'SomeInterface' и неограничен (поэтому' SomeInterface' действительно может быть любым классом!) –
yshavit