Кластеры кластеров Google Maps для максимального масштабирования

Попробуйте:

public List<Foo> getFoos() {
    List<Foo> foos = new ArrayList<Foo>();
    foos.add(new SubFoo());
    return foos;
}

Генерирующий конструктор ArrayList должен иметь определенный тип для параметризации, вы не можете использовать '?' wildcard там. Изменение экземпляра «new ArrayList & lt; Foo & gt; ()» разрешило бы первую ошибку компиляции.

Объявление переменной foos может иметь подстановочные знаки, но поскольку вы знаете точный тип, он делает больше чтобы ссылаться на информацию о том же типе. Что вы теперь говорите, что foos содержит определенный подтип Foo, но мы не знаем, что. Добавление SubFoo может быть запрещено, поскольку SubFoo не является «всеми подтипами Foo», Изменение декларации в «List & lt; Foo & gt; foos =» решает вторую ошибку компиляции.

Наконец, я бы изменил тип возвращаемого значения на «List & lt; Foo & gt;»; поскольку клиенты этого метода не смогут многое сделать с возвращаемым значением, как определено в настоящее время. Вы должны редко использовать подстановочные знаки в типах возврата. При необходимости используйте сигнатуру с параметризованным методом, но предпочитайте ограниченные типы только в аргументах метода, так как который оставляет его до вызывающего абонента, который может передавать конкретные типы и работать и соответственно.

-1
задан Ben 13 July 2018 в 09:22
поделиться