Может ли параметр универсального типа Java расширить другой параметр типа и дополнительный ограниченный тип? - PullRequest
0 голосов
/ 03 ноября 2018

Я создаю универсальный класс (TestGeneric) с параметром 2 типа (TAnimal и TMammal), с параметром 2-го типа (TMammal), расширяющим параметр 1-го типа (TAnimal) и другой тип (Mammal).

public class TestGeneric<TAnimal extends Animal, TMammal extends TAnimal & Mammal> { .. }

где

public interface Animal { ... }

public class Mammal implements Animal { ... }

У меня проблема с Java:

Невозможно указать какой-либо дополнительный связанный млекопитающий, когда первая граница имеет тип Параметр. * +1010 *

Если я поменяю местами ограниченный тип TAnimal & Mammal,

public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal & TAnimal> { .. }

У меня другая проблема с Java:

Тип TAnimal не является интерфейсом; это не может быть указано как ограниченный параметр.

Есть ли способ преодоления вышеупомянутого ограничения в Java?

Я использую Java 1.8-172.

1 Ответ

0 голосов
/ 03 ноября 2018

Нельзя использовать несколько границ, если одна из границ является параметром типа.

Кроме того, при использовании нескольких границ первый может быть классом или интерфейсом, а остальные могут быть только интерфейсами. Это связано с тем, что Java не поддерживает множественное наследование, поэтому перечисление нескольких классов аналогично перечислению только самого дальнего подкласса.

Чтобы все заработало, вам нужно написать код, подобный следующему:

public class TestGeneric<TAnimal extends Animal, TMammal extend Mammal & Animal> { }

Или потому, что Млекопитающее в любом случае реализует интерфейс Animal :

public class TestGeneric<TAnimal extends Animal, TMammal extends Mammal> { }
...