欢迎光临散文网 会员登陆 & 注册

为什么说List 不隶属于List

2023-07-20 11:55 作者:码农青年  | 我要投稿

在 Java 中,泛型是不可协变的,这意味着 List<String> 并不是 List<Object> 的子类型。这样的设计是为了保护你免受无意引入错误的危险。

假设 Java 允许这样的协变,那么你可能会遇到以下情况:

javaCopy code

List<String> stringList = new ArrayList<>(); List<Object> objectList = stringList; // 假设这是合法的 objectList.add(new Object()); // 这将在运行时出错,因为你试图在 String 类型的列表中添加一个 Object 类型的元素 String s = stringList.get(0); // 类型错误

在这个例子中,如果 Java 允许 List<String>List<Object> 的子类型,那么你就可以将一个 Object 类型的元素添加到 String 类型的列表中,这在运行时将导致错误。为了避免这种情况,Java 的泛型设计为不可协变。

但是,Java 提供了一种方式来创建一个只读的 List<Object>,这样就可以接受 List<String> 了。你可以使用通配符来创建一个只读的 List<Object>

javaCopy code

List<String> stringList = new ArrayList<>(); List<?> objectList = stringList; // 这是合法的

在这种情况下,objectList 是只读的,你不能向其添加任何类型的对象。这种方式提供了某种形式的协变性,同时也避免了类型错误。


为什么说List 不隶属于List的评论 (共 条)

分享到微博请遵守国家法律