[英]Is there a need to use bounded wildcard generics in a passthrough method?
我知道在Collection<E>
的以下方法中:
public void addAll(Collection<? extends E> subcollection);
我們使用Collection<? super E>
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);
使用Collection<? extends E> subcollection
Collection<? extends E> subcollection
使傳遞的參數成為通用施主 -即可以自由讀取。
您不需要從傳遞的集合中讀取對象,因此不需要任何通配符。
順便使用Collection<? super E> subcollection
Collection<? super E> subcollection
使其成為通用收件人-即您可以添加到其中。
有關清楚的介紹,請參見何時使用擴展和超級 。
涵蓋此通用較低未綁定vs較高邊界通配符的好答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.