我想要做的是获取从数据库中检索的所有整数项的总和,然后将其添加到LinkedList中,如下所示:
ManageFeeNotePOJO selectedRecord = (ManageFeeNotePOJO) manageFeeNoteListTableView().getItems().get(selectdIndex);
List toFeeBillListTot = new LinkedList();
toFeeBillListTot.add(selectedRecord.getFeeNoteValue());
int sum = 0;
for (Object sumItem : toFeeBillListTot) {
sum += sumItem;
}
System.out.println(sum);
有了这个,我得到了错误:
bad operand types for binary operator '+'
first type: int
second type: Object
另一种方法是:
ManageFeeNotePOJO selectedRecord = (ManageFeeNotePOJO) manageFeeNoteListTableView().getItems().get(selectdIndex);
List toFeeBillListTot = new LinkedList();
toFeeBillListTot.add(selectedRecord.getFeeNoteValue());
int sum = 0;
for (int i = 0; i < toFeeBillListTot.size(); i++) {
sum += (int) toFeeBillListTot.get(i);
}
System.out.println(sum);
我的错误java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
拜托,对于任何有关此问题的工作方法,我都会非常满意。提前谢谢。
答案 0 :(得分:1)
首先,我对使用List
声明使用原始类型感到有点奇怪。这样,我的意思是你不提供类型参数。
如果您期望获得String
的列表,那么您应该如此声明:
List<String> toFeeBillListTot = new LinkedList<>();
接下来,您不能简单地添加String
,因为这没有任何意义。您必须将它们全部转换为某种数字类型,可能是Double
:
double sum = 0;
for(String bill : toFeeBillListTot) {
sum += Double.parseDouble(bill);
}
并非上述转化仅在转化中没有任何其他异常字符时才有效(即没有千位分隔符)。
答案 1 :(得分:1)
bad operand types for binary operator '+'
first type: int
second type: Object
这就是说:&#34;你不能将+
运营商与这两种类型的运营商一起使用&#34; - 我打赌你可以猜出哪一个 - Object
- 如果你想的话,哪个有意义:
请记住,您在Java中使用的每种类型的每个类都会扩展Object
。因此,当您使用已转换为Object
的内容时,Java几乎不知道该内容是什么。特别是,对于应用于+
的{{1}},如何处理没有吓人的线索。
例如,假设你有一个Person
类并且做了
Person a = new Person();
Person b = new Person();
a + b; //WTF??
那会有意义吗?当然不是。
现在,您可能会说&#34;但我没有将对象添加到我的列表中,我添加了整数/双打/其他类型的+运算符应该使用&#34; - 我确定你是对的,但 问题在于你将它们添加到对象列表 ,你就是这样创建的:
List sum toFeeBillListTot = new LinkedList();
执行此操作时,您将创建一个&#34;无类型列表&#34;。这意味着您可以添加您喜欢的任何类型的对象 - 这可能听起来不错,但作为一个自然结果,您只能从中检索Object
,这就是您现在正在做的事情。
通过&#34;使用通用集合&#34;,@ Jeroen建议您这样做:
List<Integer> toFeeBillListTot = new LinkedList<>();
<Integer>
表示您正在创建整数列表,而不是创建对象列表,这意味着您只能向其中添加Integer
s而且你从中拉出的每一个元素都是一个整数,所以你可以这样做:
int sum = 0;
for (Integer sumItem : toFeeBillListTot) {
sum += sumItem;
}