gpt4 book ai didi

java - 对于 Java,是否可以接受使用无界通配符类型作为方法的参数,然后检查并将其转换为参数化类型?

转载 作者:搜寻专家 更新时间:2023-11-01 01:47:52 25 4
gpt4 key购买 nike

如果我对两个集合使用无限通配符类型(每个集合将具有不同的类型)作为方法的参数:

private void doAssertion(List<?> testList, List<?> generatedList)

在这个方法里面,我可以先检查这些集合中对象的类型,然后将集合转换为参数化类型吗?这闻起来很糟糕,我收到了未经检查的强制转换警告。

if (testList.get(0) instanceof X) {
List<X> xList = (List<X>) testList;
// call methods specific to X for each object
}

else if (testList.get(0) instanceof Y){
List<Y> yList = (List<Y>) testList;
// call methods specific to Y for each object
}

我的部分问题是我没有能力接触定义类 X 或 Y 的代码。否则,我知道我可以让它们实现一个通用接口(interface),并使用有界类型参数。我无法重载 assertEqual,因为这两种方法具有相同的删除。

在我的例子中,X 和 Y 始终是其他类的子类,无论如何我都没有修改对象,只是调用对象的 get() 方法。

最佳答案

不,你不应该这样做。举个例子:

List<Integer> myIntList = ...;
if (myIntList.get(0) instanceof Number) {
List<Number> myNumberList = (List<Number>)myIntList;
myNumberList.put(Double.valueOf(100)); // BAD!
}

通用参数在子类/父类(super class)层次结构中不一定是可替换的。

关于java - 对于 Java,是否可以接受使用无界通配符类型作为方法的参数,然后检查并将其转换为参数化类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000520/

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