gpt4 book ai didi

java - 克服 Java 中的类型删除

转载 作者:行者123 更新时间:2023-12-01 06:49:12 29 4
gpt4 key购买 nike

我有一个无法更改的客户端类。

List<Integer> list1= Arrays.asList(1,2,3);
System.out.println("Total sum is:"+sum(list1));
printlist(list1);
List<Double> list2=Arrays.asList(1.0,2.0,3.0);
System.out.println("Total sum is:"+sum(list2));
printlist(list2);

我这里有业务逻辑

private static Object sum(List<? extends Number> list) {
double sum = 0;
for (Number i: list) {
sum+=i.doubleValue();
}
return sum;
}

所以我想为整数返回 6,为 double 返回 6.0。我怎样才能做到这一点?我正在考虑根据类型将 sum 类型转换为 int 或 double,但由于类型删除,所有信息都丢失了。有人能帮我吗?

最佳答案

列表中的对象在运行时仍然具有与其关联的类型信息。唯一被删除的类型是泛型类型(即示例中的 List )。泛型在编译时进行检查,但不会在生成的字节码中维护。这意味着您可以使用 instanceof 来检查集合的内容:

private static Object sum(List<? extends Number> list) {
Integer integerSum = 0;
Double doubleSum = 0.0;
boolean hasDouble = false;
for (Number i: list) {
if (i instanceof Integer) {
integerSum += i.intValue();
} else {
doubleSum += i.doubleValue();
hasDouble = true;
}
}
if (hasDouble)
return doubleSum + integerSum;
return integerSum;
}

代码在处理混合列表方面有一些特殊性,并且不能正确处理LongShortByte等。

关于java - 克服 Java 中的类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51373059/

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