Я знаю, что в следующем методе в Collection<E>
:Нужно ли использовать ограниченные подстановочные знаки в методе пересылки?
public void addAll(Collection<? extends E> subcollection);
Мы используем Collection<? super E>
там, чтобы коллекцию, которая существует только суб-элементов, пример:
List<Drivable> drivables = new ArrayList<>();
List<Car> cars = new ArrayList<>();
//we need the wildcard here, because of the following line:
drivables.addAll(cars);
Однако такие ограниченные подстановочные необходимо в моем следующем методе?
public static <E> Collection<E> requireNonEmpty(final Collection<E> collection) throws NoSuchElementException {
if (collection.isEmpty()) {
throw new NoSuchElementException("collection must be non-empty");
}
return collection;
}
Это использует аналогичную идиому как Objects.requireNonNull(T object)
, который фактически возвращающий T object
.
Итак, есть ли какая-либо польза (или это даже неправильно?), Чтобы написать мой метод следующим образом?
public static <E> Collection<? super E>
requireNonEmpty(final Collection<? extends E> collection);
Возможно, вы захотите прочитать это - [Java Generics: Что такое PECS?] (Http://stackoverflow.com/q/2723397/738746). –
@BheshGurung Я прочитал, что, как бы то ни было, я не могу применять эту информацию на моем сайте. – skiwi
Ваш метод сам по себе является универсальным, поэтому вы можете передать ему коллекцию любого типа. Представьте себе, был ли тип типа 'E' объявлен на уровне класса, а ваш метод - методом экземпляра, и вы хотели бы, чтобы метод взял коллекцию E или любой подкласс/суперкласс E, тогда вам нужно будет использовать его. –