2009-09-05 112 views
0

單個數據結構,用於在單個變量中存儲不同類型。是否有可以存儲能夠存儲不同類型的數據結構?

不要求泛型,一些動態類型的數據結構。

可能嗎?

+0

如果Java是您的唯一選擇,那麼David的答案是您唯一的選擇。如果不是的話,你可能想看看Groovy或Scala。 – Chintan 2009-09-05 16:53:34

+0

在Java中沒有動態類型,因爲它是一種難分類的語言。你可以期望的最好的方法是使用一個元素作爲Object,或者如果該類型事先知道,則使用泛型。正如Chintan所提到的,如果您需要這種功能,您需要使用軟鍵入語言。 – aperkins 2009-09-05 17:02:17

+0

您可以通過在單個變量中存儲不同類型來添加您嘗試解決的問題嗎?這可能會給你一個關於如何做到這一點的答案。如果所有類型都需要以同樣的方式處理,那麼需要一個接口,否則僅僅使用一個對象可能會起作用。 – 2009-09-05 17:03:29

回答

3

我不是100%確定你在問什麼,但是所有的Java集合都支持非鍵入的數據。例如:

List dataStructure = new LinkedList(); 

dataStructure.add(new Long(5)); 
dataStructure.add("Hello"); 
dataStructure.add(new BankAccount()); 
2

您可以使用Object作爲變量類型。

不確定你究竟是什麼。我認爲,在Java中,泛型提供了動態類型。

4

是的。標準庫中的所有數據結構都最終使用類型刪除的泛型。例如:

ArrayList<Object> dynamicData = new ArrayList<Object>(); 

應該沒問題。請記住,在將物體從結構中拉出之後,您必須進行投射。

+0

只是普通的ArrayList呢? – 2009-09-05 16:55:46

+0

跳棋:原始類型不好,姆凱。大衛:類型擦除在這裏完全不相關。 – 2009-09-05 17:22:07

+0

編譯器抱怨,如果你使用裸類型,並使用列表保持愉快。 – 2009-09-05 17:25:24

2

從技術上講,因爲所有東西都是從Object繼承而來的,所以對於原語是自動裝箱的,你可以。雖然沒有強制性地使用「if X instanceof Y」語句,但您會有一段時間。

+0

其實你會有一個粘性時間*,因爲*強制轉換和instanceof調用:P – MattC 2009-09-05 18:59:29

相關問題