java - 为什么我们需要Java 中的 pure?
问题描述
为什么我们需要<?>
Java 中的 pure?传递的任何东西都只能用作 Object 吗?所以它与任何转换为 Object 的类一样有用(只有 9 种方法可用)
谢谢
我的意思是,如果你有 List< ? > 列表,您只能将项目用作对象。这意味着 list.get(0) 只为您提供 Object ,仅此而已。是的,我也可以在那里存储任何东西,但这对你有用吗?这就像你有一个好东西,但把它扔进了垃圾箱。你能从垃圾桶里得到的只有垃圾。您也可以将任何类的任何好的对象放到 List 中,但只从那里获取 Object ,只有 9 个方法。
解决方案
在两种情况下,无界通配符是一种有用的方法:
如果您正在编写一个可以使用
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
- 并且该方法交换索引元素。无需担心类型参数。
有关详细信息,请参阅:无界通配符。
推荐阅读
- reactjs - React + Typescript:使用具有可选泛型类型的函数的道具正确键入通用组件
- android - 使用jetpack compose时android studio gradle脚本中compileSdk和compileSdkVersion有什么区别
- elasticsearch - 最新 N 条记录上的 Elasticsearch 聚合
- php - 在 laravel 中动态确定 http/https
- reactjs - 在 reactJS 中从 IndexedDB 获取视频 URL
- rust - 创建递归枚举——我应该使用生命周期引用吗?(锈)
- python - Visual Studio Code 调试器不工作
- python - 我将如何正确实现异步任务?
- python - 我如何在第一个数据帧上运行一个循环,在第二个数据帧上运行一个内部循环,以计算他们的学科分数与学生之间的差异?
- matplotlib - 有没有办法在文本文件中操作数据,即更改值并绘制它们?