为什么List.contains()在Collections Java中将Object作为参数[重复]

问题描述 投票:0回答:1

java.util.List.contains(Object o)
方法将
Object
作为参数,并在内部使用
Object.equals(Object o)
,如此处所述。

如果我在 Netbeans 中执行以下代码:

 List<String> listStr = new ArrayList<>();
 listStr.contains(34); //warning

它给出了明显警告,即:

Given object can not contain instances of int (expected String)

既然所有人都可以看到,

String
永远不等于
int
那么为什么不应该采用元素类型
E
(在我的例子中是
String
)作为参数而不是
Object
作为参数?

java list object collections
1个回答
2
投票

我认为这是因为你可以做到这一点:

List<?> listStr = new ArrayList<>();

在这种情况下,您不知道类型是什么,因此如果将类型 T 作为参数而不是对象,则无法验证此列表中是否包含元素。这会破坏通配符的使用。

© www.soinside.com 2019 - 2024. All rights reserved.