Как написать метод, который имеет аргумент, реализующий интерфейс в Java - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть интерфейс с именем ListInterface<T>, который имеет метод join:

public interface ListInterface<T> {
     /**
     * Join a new list to the original list.
     * @param otherList The new list to be joined.
     * @return Original list with appended part from the new list.   
     * @throws IllegalArgumentException.
     */
     public ListInterface<T> join(ListInterface<T> otherList) throws IllegalArgumentException;
}

Два класса DoubleLinkedList и MyArrayList реализуют этот интерфейс. Поэтому в DoubleLinkedList мне нужно написать join так:

public ListInterface<T> join(DoubleLinkedList<T> otherList) throws IllegalArgumentException {
    (...)
}

А в MyArrayList:

public ListInterface<T> join(MyArrayList<T> otherList) throws IllegalArgumentException {
    (...)
}

Но это невозможно, и тип аргументов должен быть ListInterface<T>. Если я изменю сигнатуры методов в этих классах на public ListInterface<T> join(ListInterface<T> otherList), то я больше не смогу использовать другие специфические методы на DoubleLinkedList или MyArrayList. Как мне изменить сигнатуру метода в ListInterface, чтобы это исправить?

1 Ответ

0 голосов
/ 29 апреля 2018

Как мне изменить сигнатуру метода в ListInterface, чтобы это исправить?

Ты не. Подпись метода ListInterface верна как есть.

Если я изменю сигнатуры методов в этих классах на public ListInterface<T> join(ListInterface<T> otherList), то я не смогу больше использовать другие специфические методы для DoubleLinkedList или MyArrayList.

Это правильно. Вы не должны использовать какие-либо методы подкласса, потому что otherList может не совпадать с типом списка, как this. Пользователь может попытаться присоединить DoubleLinkedList к MyArrayList, да?

Использовать только методы интерфейса.

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