Java 在传递方法中是否需要使用有界通配符泛型?

Java 在传递方法中是否需要使用有界通配符泛型?,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,我知道在集合中的以下方法中: CollectionYou可能需要阅读此-。@bheshgurhung我已经读过了,但是我似乎无法将这些信息应用到我的用例中。您的方法本身是泛型的,因此您可以将任何类型的集合传递给它。想象一下,如果类型参数E是在类级别声明的,并且您的方法是一个实例方法,并且您希望方法获取E的集合或E的任何子类/超类,那么您将需要使用它,我不明白您为什么要使用边界。请注意,requireNonEmpty返回类型正在丢失信息,这与requireNonNull不同。例如,可以传入一个集合

我知道在
集合中的以下方法中:


CollectionYou可能需要阅读此-。@bheshgurhung我已经读过了,但是我似乎无法将这些信息应用到我的用例中。您的方法本身是泛型的,因此您可以将任何类型的集合传递给它。想象一下,如果类型参数
E
是在类级别声明的,并且您的方法是一个实例方法,并且您希望方法获取E的集合或E的任何子类/超类,那么您将需要使用它,我不明白您为什么要使用边界。请注意,
requireNonEmpty
返回类型正在丢失信息,这与
requireNonNull
不同。例如,可以传入一个
集合
,而只返回一个
集合
。为了解决这个问题,应该将其声明为
公共静态
public void addAll(Collection<? extends E> subcollection);
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;
}
public static <E> Collection<? super E> 
    requireNonEmpty(final Collection<? extends E> collection);