Java收集方法

Java收集方法,java,Java,我开始学习Java,我有一个关于泛型的问题 在采集界面的方法中: boolean containsAll(集合c) 布尔removeAll(集合c) 布尔保留(集合c) 为什么参数集合c而不是集合c 非常感谢,因为需要指定E类型参数,而通配符?适用于每种类型。微妙的区别在于 E表示任何指定类型 ?表示任何未知类型 由于这些方法应该在任何未知类型的集合上工作,因此它们根本不指定类型参数E是一个类型变量?不是一个变量,是一个无法指定的占位符。JDK设计者希望可以编写如下代码: Collectio

我开始学习Java,我有一个关于泛型的问题

采集
界面的方法中:

boolean containsAll(集合c)
布尔removeAll(集合c)
布尔保留(集合c)

为什么参数
集合c
而不是
集合c


非常感谢,因为需要指定
E
类型参数,而通配符
适用于每种类型。微妙的区别在于

  • E
    表示任何指定类型
  • 表示任何未知类型

由于这些方法应该在任何未知类型的集合上工作,因此它们根本不指定类型参数
E
是一个类型变量<代码>?
不是一个变量,是一个无法指定的占位符。

JDK设计者希望可以编写如下代码:

Collection<String> strings = Arrays.asList("foo", "bar", "baz");
Collection<Object> objects = Arrays.asList("foo", 123);
strings.removeAll(objects);
// strigns now contains only "bar" and "baz"
Collection strings=Arrays.asList(“foo”、“bar”、“baz”);
集合对象=Arrays.asList(“foo”,123);
strings.removeAll(对象);
//strigns现在只包含“bar”和“baz”
(上面的代码可能无法准确编译,因为我记不起
Arrays.asList()
如何捕获类型参数,但它应该能够理解这一点。)


也就是说,因为您可以对任何一对对象调用
.equals()
,并获得有意义的结果,所以您实际上不需要将这些方法限制为特定的项目类型。

检查好了,您应该首先问一些“更简单的问题”:为什么
包含(对象)
包含(E)
.smallwig.blogspot.com/2007/12/why-does-setcontains-take-object-not-e。html@LouisWasserman@unreputable好的,谢谢你的链接。我明白这一点。但是,为什么contains中的参数所有
而不是
这些方法的可能重复项似乎都来自
集合
,所以它们的作用域中确实有类型参数。