首页 > 解决方案 > 为什么我们需要Java 中的 pure?

问题描述

为什么我们需要<?>Java 中的 pure?传递的任何东西都只能用作 Object 吗?所以它与任何转换为​​ Object 的类一样有用(只有 9 种方法可用)

谢谢


我的意思是,如果你有 List< ? > 列表,您只能将项目用作对象。这意味着 list.get(0) 只为您提供 Object ,仅此而已。是的,我也可以在那里存储任何东西,但这对你有用吗?这就像你有一个好东西,但把它扔进了垃圾箱。你能从垃圾桶里得到的只有垃圾。您也可以将任何类的任何好的对象放到 List 中,但只从那里获取 Object ,只有 9 个方法。

标签: javagenericswildcard

解决方案


在两种情况下,无界通配符是一种有用的方法:

  • 如果您正在编写一个可以使用Object类中提供的功能来实现的方法。

  • 当代码使用泛型类中不依赖于类型参数的方法时。
    例如List.size, 或List.clear。事实上,Class<?>之所以经常使用,是因为其中的大多数方法Class<T>都不依赖于T.

例如,参见Collections.swap方法:

public static void swap(List<?> list, int i, int j) {
    final List l = list;
    l.set(i, l.set(j, l.get(i)));
}

知道类型并不能帮助交换 a 中的两个元素List,因此使用了无界通配符。您传入一个List- any List- 并且该方法交换索引元素。无需担心类型参数。

有关详细信息,请参阅:无界通配符。


推荐阅读