为什么我们需要Java中的纯<?>?

arm*_*ren 3 java generics wildcard

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

谢谢


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

Ole*_*hov 6

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

  • 如果您正在编写可以使用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)));
}
Run Code Online (Sandbox Code Playgroud)

知道该类型无助于交换a中的两个元素List,因此使用无界通配符.您传入a List- any List- 并且该方法交换索引元素.没有类型参数需要担心.

有关更多信息,请参阅:无界通配符.