2012-01-18 58 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