2014-11-16 200 views
0

我需要一個可以存儲和返回不同類型值的類。我無法定義我自己的班級。 我發現的唯一滿足我需求的課程是List類。 我從數據庫表中檢索值。 這是我的方法:具有可變數量變量的類

//the total number of these variables can vary. The same is true for their types; 
int intValue = 1; 
String stringValue = "text 1"; 
byte[] dataValue = new byte[4]; 


List row = new ArrayList(); 
row.add(intValue); 
row.add(stringValue); 
row.add(dataValue); 

List rows = new ArrayList(); 
rows.add(row); 

intValue = 6; 
stringValue = "text 2"; 
dataValue = new byte[8]; 

row = new ArrayList(); 
row.add(intValue); 
row.add(stringValue); 
row.add(dataValue); 

rows.add(row); 

String text1 = (String) ((List)rows.get(0)).get(1); 
String text2 = (String) ((List)rows.get(1)).get(1); 

您能否提供一個更好的方式來存儲的通用類型的數據,因爲我覺得我的實現是錯誤的。

+1

「你能提出一個更好的方法來存儲泛型類型」 - 答案在你的問題。 – Maroun

+2

在相同的數據結構中存儲'Object'類型的變量不是通用的,而且大多數時候是不好的設計。 – Dici

+0

但是鑄件怎麼樣,是否耗費資源? – vovahost

回答

1

那麼...你可以使類通用,通過你想要使用的類型進行參數化。或者你也許可以在代碼中使用T1 t1s[]; T2 t2s[]; T3 t3s[],並且只爲每個數據留下變量,並且理解一次只有一個是活動的。

但是,你的意思是數據?因爲數據應該是一個字符串或JSON或XML或其他東西。在這種情況下,只需存儲並通過它。

但是,你是否真的想要無限數量的任意數據類型的對象?那麼,你將如何編碼?你找回可能是任何類型的對象,所以你不能調用任何特定的方法。你不知道類型是什麼,因爲它是完全動態的,所以你甚至不能用一堆instanceof語句來提取。

或者,也許你所有的數據都有一個公共基類,你只需要基類方法?完美,extend一個共同的基類。這是繼承的目的。 dr:你的設計很糟糕,Java被設計爲禁止它。修理它。

+0

通過數據我的意思是不同的值。我從數據庫表中檢索值。表可以具有不同的列類型,如String,int。我的listOfObjects是來自數據庫的一行。 – vovahost

+0

我知道每個對象或原語的類型,因爲我有列和它們的數據類型列表 – vovahost

1

我個人會選擇一個ArrayList,因爲它是動態的,但您可以對數組做同樣的事情。你是說你無法弄清楚如何定義一個可以容納泛型的類?所有你需要做的就是把它定義爲持有任何對象/泛型類型的集合:

ArrayList<Object> myList = new ArrayList<>(); 
myList.add(new String("Some String")); 
myList.add(2); 
System.out.println(myList.get(0)); 
System.out.println(myList.get(1)); 

你真的可以添加你想在「myList中」什麼類型的對象。這是在Java中使用多態的主要好處。