gpt4 book ai didi

java - 为什么 List.get(0) 返回 double 值?

转载 作者:行者123 更新时间:2023-12-02 10:09:20 25 4
gpt4 key购买 nike

开始迭代列表时出现错误。我的列表类型是 Long 。但是当开始迭代时,却显示无法转换double的错误至long !

List<Long> orderNos = settingRepository.getUnchangedOrdersNoInCardindeForEdit();
for (long orderNo : orderNos) {
...
}

编辑:

@Override
public List<Long> getUnchangedOrdersNoInCardindeForEdit() {
String orders = settingPref.getUnchangedOrdersNoInCardindeForEdit();
return StringHelper.deserialize(orders);
}

public static < T > T deserialize(String obj){
Gson gson = new Gson();
Type token = new TypeToken<T>(){}.getType();
return gson.fromJson(obj, token);
}

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long

这里有什么问题吗?如果我的值是双倍的,那么它应该在填充 List<long> 的第一行抛出异常。 ,不在第二个中。

enter image description here

enter image description here

最佳答案

如果 settingRepository.getUnchangedOrdersNoInCardindeForEdit() 则可能会发生这种情况正在做一些顽皮的事情 - (ab)使用原始类型。

我在这里重现了类似的情况:

public static void main(String[] args) {
List<Long> list = getLongList();
for (Long l : list) {
System.out.println(l);
}
}

public static List<Long> getLongList() {
List l = new ArrayList();
l.add(1.2);
return l;
}

我的getLongList方法被声明返回 List<Long> ,但我实际上在那里做的是创建一个原始 List ,输入 Double放入其中,然后返回。

因为我使用原始类型,编译器停止检查类型安全,允许我返回 List包含Double当我应该返回List<Long>时.

列表返回给调用者main ,并请注意,由于仅在编译时检查泛型,因此运行时不知道此行发生了错误:

List<Long> list = getLongList();

当您尝试将项目从列表中取出并说它们是 Long 时,运行时才知道发生了错误。 s,但它们不是。

所以你应该看看里面 settingRepository.getUnchangedOrdersNoInCardindeForEdit() 。如果此方法是由您编写的,您可能应该编辑它以不使用原始类型,然后可能会出现编译器错误,这将导致您解决问题。

关于java - 为什么 List<Long>.get(0) 返回 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55115814/

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