1
我知道,在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泛型:什麼是PECS?](http://stackoverflow.com/q/2723397/738746)。 –
@BheshGurung我已經讀過,但是我似乎無法將這些信息應用於我的用例。 – skiwi
你的方法本身是通用的,所以你可以傳遞任何類型的集合給它。想象一下,如果類型參數「E」是在類級別聲明的,而你的方法是作爲實例方法聲明的,並且你想要方法來獲取E或E的任何子類/超類的集合,那麼你需要使用它。 –