具有可变数量的变量的类

时间:2014-11-16 15:32:06

标签: java

我需要一个可以存储和返回不同类型值的类。我无法定义自己的课程。 我找到的唯一符合我需求的课程是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);

您能否提出更好的方法来存储泛型类型数据,因为我认为我的实现是错误的。

2 个答案:

答案 0 :(得分:1)

嗯......你可以按照你想要使用的类型对类进行泛型化,参数化。或者您可以在代码中使用T1 t1s[]; T2 t2s[]; T3 t3s[]并为每个数据保留变量,并且理解一次只有一个是活动的。

但你真的是指数据吗?因为数据应该是字符串或JSON或XML或其他东西。在这种情况下,只需存储 并传递它。

但你真的是说你想要一个无限数量的任意数据类型的对象吗?好吧,你怎么用这个编码?你得到一个可以是任何类型的对象,所以你不能在它上面调用任何特定的方法。你不知道这个类型是什么,因为它是完全动态的,所以你甚至无法用一堆instanceof语句提取。

或许您的所有数据都有一个共同的基类,您只需要基类方法?完美,extend一个共同的基类。这就是继承的目的。

tl; dr:你的设计很糟糕,Java旨在禁止它。解决它。

答案 1 :(得分: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));

你真的可以在&#34; myList&#34;中添加你喜欢的任何类型的对象。这是在Java中使用多态的主要好处。