gpt4 book ai didi

java - 为什么 List 接口(interface)的 lastIndexOf() 方法接受 Object 作为参数而不是 E?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:06 24 4
gpt4 key购买 nike

lastIndexOf() List接口(interface)的方法接受一个Object类型的参数。

然而,add()方法接受类型为 E 的参数(这是在创建列表时定义的列表的泛型类型)由于 add() 只接受 E,这可以防止开发人员(或用户)在编译时将任何不兼容的对象添加到列表中。

现在,Java 文档说如果传递的对象不兼容,lastIndexOf() 可以抛出 ClassCastException。但是,当我在 Eclipse Helios 中运行以下代码时,我没有得到任何异常:-

package scjp.collection.list;

import java.util.ArrayList;
import java.util.List;

public class LastIndexOf {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();

list.add("some");
list.add("thing");
list.add("at");
list.add("last");
list.add("and");
list.add("at");
list.add("again");



System.out.println(list.lastIndexOf("at"));
System.out.println(list.lastIndexOf(10)); // # 1
System.out.println(list.lastIndexOf(new LastIndexOf())); // # 2
}
}

在第 1 行和第 2 行,我将不兼容的对象传递给了我的 String 类型的列表。但是,我得到的输出是:-

5
-1
-1

我没有得到 ClassCastException。

如果 lastIndexOf() 方法接受类型为 E 的对象而不是类型为 Object 的对象,这只会在编译时被阻止。为什么不这样做??

Java 的创造者一定想到了如果它接受 E(而不是 Object)可能会发生的一些问题。会有什么危害??

最佳答案

您不需要 E类型——请记住,泛型只是类型检查的类型转换糖,equalsObject 上定义,因此您无需强制转换该项目即可确定它是否等于列表中的其他项目。此外,请考虑有界通配符的使用。如果您的列表定义为 List<? extends Foo> ,您将无法获得 lastIndexOf对于 null 以外的任何项目.

关于java - 为什么 List 接口(interface)的 lastIndexOf() 方法接受 Object 作为参数而不是 E?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9075993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com