2012-01-18 57 views
2

该列表可能包含整数和字符串值。在这种情况下,我应该创建对象列表吗?对象列表。整数条目操作

List<Object> list = new ArrayList<Object>(); 

如何使用列表的整数条目执行简单的算术运算?

list.add(1); 
list.add("ok"); 
list.add(2); 
Integer a = list.get(0) - list.get(2); // does not work 
+2

为什么你不能有2个列表:一个用于整数,另一个用于字符串? – 2012-01-18 12:11:50

+0

我喜欢你的想法,试试这个看起来很自然。直接进入我在Java中自动装箱的错误列表。 – x4u 2012-01-18 12:13:27

+0

@Victor Sorokin:如果我只有String和Integer,这将是一个很好的解决方案。实际上,可能会有更多的类型。因此,我需要在代码中保持高水平的泛型。 – 2012-01-18 12:48:19

回答

5

你需要转换Object s到INT,因为-经营者不得在Object已定义和Java不会自动拆箱这些。

Integer a = ((Integer)list.get(0)) - ((Integer)list.get(2)); 
+0

嘿,看来我对你的帖子做了downvote而不是upvote。你可以做一个小的编辑,以便我可以撤销这个? – 2012-01-18 13:35:30

+0

@Milad Naseri我感谢你的诚实:-)你去。谢谢! – Matten 2012-01-18 13:39:04

+0

完成。抱歉,添麻烦了。我只是不小心:) – 2012-01-18 16:16:19

5

这是因为最终list.get(0);Object。如果你想对它进行算术运算,你必须施放它:

Integer a = (Integer) list.get(0) - (Integer) list.get(2); 
1

这是一个非常糟糕的设计说实话。如果你想遍历这个列表呢?您将不得不手动检查元素是字符串还是整数。出于某种原因引入Java的泛型。

你不能制作2个列表:一个用于字符串,一个用于整数。或者至少使用一个列表,但不使用字符串使用(通常未使用的)整数值?

+0

不,我不能这样做。我正在读取数据库中的数据,由于某些特定原因,我需要将这些数据保存在一个列表中。 – 2012-01-18 12:50:33

+0

我了解可能有一些我们不知道的细节。尽管如此,我还是鼓励你至少尝试并重构这一系统。否则,这将是一个定时炸弹,每天只会增加技术债务。 – 2012-01-18 13:35:15