Java 为什么synchronizedCollection()静态工厂方法的输入参数中没有有界通配符?

Java 为什么synchronizedCollection()静态工厂方法的输入参数中没有有界通配符?,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,在阅读Java教程时,我偶然发现了一些我不理解的东西。在Collections trail中,我注意到两个静态工厂方法- public static <T> Collection<T> synchronizedCollection(Collection<T> c); public static <T> Collection<T> unmodifiableCollection(Collection<? extends T>

在阅读Java教程时,我偶然发现了一些我不理解的东西。在Collections trail中,我注意到两个静态工厂方法-

public static <T> Collection<T> synchronizedCollection(Collection<T> c);

public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c);
公共静态集合synchronizedCollection(集合c);

public static Collection unmodifiableCollection(Collection
Collection
Collection我认为
unmodifiableCollection
是错误的。这两种方法都打算将
Collection
包装为
Collection
,没有理由更改类型参数


当然,接受
集合更灵活我认为
不可修改集合
是错误的。这两种方法都打算将
集合
包装为
集合
,没有理由更改类型参数

当然,接受
集合更灵活
public static <T> Collection<T> synchronizedCollection(Collection<? extends T> c);
Collection<? extends Number> someNumbers = ...;
          Collection<Number> readonlyNumbers 
                             = unmodifiableCollection(someNumbers);
          Collection<Object> readonlyObjects 
                             = unmodifiableCollection(someNumbers);
Collection<? extends Number> readonlyNumbers 
                             = unmodifiableCollection2(someNumbers);
Collection<? extends Object> readonlyObjects  
                             = unmodifiableCollection2(someNumbers);