2014-11-16 152 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中使用多态的主要好处。