Как использовать дженерики с классом и его подклассом в Java? - PullRequest
0 голосов
/ 29 марта 2019

Я пишу эту простую Java-программу с общим классом. Однако у меня возникла проблема при тестировании программы: Класс «Студент» расширяет класс «Человек». При создании ArrayBox (мой универсальный класс) я не могу использовать класс Student при создании ArrayBox

Я вижу ошибку: "java: аргумент типа com.company.Student находится за пределами переменной типа T"

класс Студент расширяет класс Person. Я попытался заставить его реализовать Comparable, но у меня возникла ошибка, сообщающая, что он не может наследоваться от разных типов (Расширяет лицо и реализует C)

Я пытался сделать его расширяемым Comparable, но, похоже, он тоже не работает.

Эта часть показывает мне ошибку:

ArrayBox<Student> bst = new ArrayBox<>(1);

Это объявление ArrayBox:

public class ArrayBox<T extends Comparable<T>> {

Объявление класса Person:

public class Person implements Comparable<Person>{

Декларация студенческого класса:

public class Student extends Person{

Я искал в Интернете, но до сих пор не понимаю, что я могу сделать, чтобы сделать эту работу. Эта проблема может быть легко решена (или, скорее, ее можно избежать) используя:

ArrayBox<Person> bst = new ArrayBox<>(1);

вместо:

ArrayBox<Student> bst = new ArrayBox<>(1);

Но мне действительно нужна эта работа со вторым классом. Как объявить класс «Студент», чтобы этот код работал?

Извините, если мой вопрос кажется хаотичным, поскольку я задаю его впервые.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Возможный способ - немного изменить сигнатуру ArrayBox на что-то вроде:

public class ArrayBox<T extends Comparable<? super T>>

Вышеприведенное сделает ArrayBox открытым для расширений T.

0 голосов
/ 29 марта 2019

Причина в том, что Student расширение Person делает его Comparable<Person>, но не Comparable<Student>, чего ожидает ваш ArrayBox.

Этого должно быть достаточно, чтобы позволить ему implement Comparable<Student>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...