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

标签 java generics bounded-wildcard

我正在学习 Java 教程,偶然发现了一些我不明白的东西。在 Collections 线索中,他们谈论 Wrapper implementations ,我注意到两个静态工厂方法 -

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

public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c);

我想知道为什么同步包装器不使用有界通配符?我。 e.为什么synchronizedCollection的签名不是下面这样?

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

最佳答案

Collection<? extends T> c这样你只能获取东西但不能添加东西,这在 unmodifiableCollection 的情况下是有意义的。 ,对于该方法,参数只能充当生产者。但如果是synchronizedCollection ,它是同步的,但仍然可以修改,它还应该能够添加和删除,所以它必须是 Collection<T> c ,它应该同时充当生产者和消费者。

了解 What is PECS (Producer Extends Consumer Super)? 可能会有所帮助

关于java - 为什么synchronizedCollection()静态工厂方法的输入参数中没有有界通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715426/

相关文章:

java - 如何将实体绑定(bind)到特定的持久性单元

java - jberet,一个wildfly实例,多个数据源: can I use more than one job-repository?

java - 在 Web 收获 xml 中使用正则表达式

scala - 1::List[Nothing] in foldLeft

java - 使用 java.util.Function 作为函数式编程的通用方法

java - 类型 安全警告

java - 原始类型、无界通配符和有界通配符

java - 批量解压.gz文件

java - 为什么这种通用分配是非法的?

java - java和反射中对泛型的限制