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
作为参数?
我认为这是因为你可以做到这一点:
List<?> listStr = new ArrayList<>();
在这种情况下,您不知道类型是什么,因此如果将类型 T 作为参数而不是对象,则无法验证此列表中是否包含元素。这会破坏通配符的使用。