вернуть Arraylist универсальных объектов err - PullRequest
0 голосов
/ 08 июня 2019

У меня есть следующий универсальный объект:

public class A<T> {
    T a;
 .......
}

Следующий интерфейс:

public interface SearchA{
........
   public  ArrayList<A> getChildren(A a);
}

, и я пытаюсь реализовать этот интерфейс в классе:

public class AGraph implements SearchA{
......
    public ArrayList<A> getChildren (A s)
    {
        .......
        ArrayList<A<String>> list= new ArrayList();
        ....
        return list;
    }
}

В этой реализации я получаю сообщение об ошибке при попытке вернуть список, потому что его тип ArrayList<A<String>> вместо ArrayList<A>.Нужно ли сделать интерфейс ASearch универсальным?(добавить <T> в заголовок класса)?Или у меня есть другой вариант?

Спасибо.

1 Ответ

0 голосов
/ 08 июня 2019

Ваш метод из интерфейса SearchA возвращает ArrayList, который содержит необработанную версию A, но при реализации фактического метода вы возвращаете ArrayList, который содержит универсальную версию A.

Следовательно, они не одинаковы и несовместимы.

Быстрое исправление:

public interface SearchA {
    public List<A<String>> getChildren(A a);
}

public class AGraph implements SearchA {
    @Override
    public List<A<String>> getChildren(A a) {
        List<A<String>> arrayList = new ArrayList<>();
        return arrayList;
    }
}

Дополнительные примечания:

  1. В этом случае лучше использовать new ArrayList<>(), а не new ArrayList(), поскольку последним вариантом будет непроверенное назначение.

  2. Лучше использовать List вместо ArrayList в типе возврата метода и при объявлении ссылочной переменной.

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