Как я могу бросить список с помощью дженериков в Java?

Вы можете попробовать настроить SQL-сервер:

  1. Шаг 1: Откройте SQL-сервер 20xx Configuration Manager
  2. Шаг 2: Нажмите «Протоколы для SQL» в конфигурации SQL-сервера. Затем щелкните правой кнопкой мыши TCP / IP, выберите «Свойства»
  3. . Шаг 3: Нажмите вкладку «IP-адрес», «Изменить все TCP». Порт - 1433

ПРИМЕЧАНИЕ: ВСЕ TCP-порт - 1433. Наконец, перезапустите сервер.

26
задан Ry. 19 March 2009 в 14:53
поделиться

5 ответов

Измените свой метод, чтобы использовать подстановочный знак:

public ArrayList<? extends MyInterface> getMyInterfaces() {    
    ArrayList<MyPojo> myPojos = new ArrayList<MyPojo>(0);
    myPojos.add(new MyPojo(0));
    myPojos.add(new MyPojo(1));

    return myPojos;
}

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

public ArrayList<MyInterface> getMyInterfaces() {
    // Note the change here
    ArrayList<MyInterface> myPojos = new ArrayList<MyInterface>(0);
    myPojos.add(new MyPojo(0));
    myPojos.add(new MyPojo(1));

    return myPojos;
}

Как обсуждалось в комментариях:

  • Возвращение коллекций с подстановочными знаками может быть неудобным для вызывающих
  • Обычно это лучше использовать интерфейсы вместо конкретных типов для возвращаемых типов. Таким образом, предлагаемая подпись, вероятно, будет одной из:

    public List<MyInterface> getMyInterfaces()
    public Collection<MyInterface> getMyInterfaces()
    public Iterable<MyInterface> getMyInterfaces()
    
41
ответ дан Jon Skeet 15 October 2019 в 07:24
поделиться

В этом случае я сделал бы это как это:

public ArrayList<MyInterface> getMyInterfaces() {

    ArrayList<MyInterface> myPojos = new ArrayList<MyInterface>(0);
    myPojos.add(new MyPojo(0));
    myPojos.add(new MyPojo(1));

    return myPojos;
}

MyPojo ist типа MyInterface (поскольку это реализует интерфейс). Это означает, можно просто создать Список с Интерфейсом, в котором Вы нуждаетесь.

0
ответ дан Tobias Langner 15 October 2019 в 07:24
поделиться

Вы должны делать:

public ArrayList<MyInterface> getMyInterfaces() {   
   ArrayList<MyInterface> myPojos = new ArrayList<MyInterface>(0);    
   myPojos.add(new MyPojo(0));    
   myPojos.add(new MyPojo(1));    
   return myPojos;
}
4
ответ дан Jacob Schoen 15 October 2019 в 07:24
поделиться

Попытайтесь использовать интерфейсы везде кроме тех случаев, когда построение экземпляров и Вас проблемы уйдет:

public List<MyInterface> getMyInterfaces()
{
    List<MyInterface> myInterfaces = new ArrayList<MyInterface>(0);
    myInterfaces.add(new MyPojo(0));
    myInterfaces.add(new MyPojo(1));

    return myInterfaces;
}

, Поскольку другие уже сказали, использование MyInterface решает Вашу проблему. Также лучше использовать интерфейс List вместо ArrayList для типов возврата и переменных.

0
ответ дан starblue 15 October 2019 в 07:24
поделиться

Выбор правильного типа от запуска должен лучше всего, однако ответить на Ваш вопрос, можно использовать стирание типа.

return (ArrayList<MyInterface>) (ArrayList) myPojos;

24
ответ дан Peter Lawrey 15 October 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: