如何在容器中存储不同类型的对象?

时间:2012-10-11 08:40:15

标签: java containers

我想知道我是否可以拥有一个数组(或基本上是一个表),其中每个元素都是一组不同类型的对象。我的意思是我想创建这样的东西(我知道它的语法不正确,只是想表明我的想法):

List<String, int, double, Date, ... , etc > list_name

我这样做是为了确保当我将所有这些信息保存到我的数据库时,我将把所有这些信息都放在数据库的同一条目中。这是因为我从不同的站点进行了一些网络抓取以收集所有这些数据,即在列表中,字符串可能来自站点A,int可能来自站点B等。我发现某些信息可能由于某些原因而错过(比如说,对于列表的特定元素,来自站点A的字符串可能会丢失,其他数据就在那里,非常好。)。如果我将这些数据存储到单独的列表中,我担心会有一些不匹配的数据。

现在我的解决方案是创建一个类,比如ClassA:

ClassA{

public String info1
public int info2
public double info3
..
..
public wtever info

}

然后我会有一个ClassA列表

我想知道是否有更好的方法来实现这一目标?

6 个答案:

答案 0 :(得分:5)

  

我这样做是为了确保当我将所有这些信息保存到我的数据库时,我将把所有这些信息都放在数据库的相同条目中​​。

是的,你通过创建一个包含所有值的类来完成正确的事情。

并且,正如您已经注意到的,如果您希望执行多个数据库插入/更新,则可以创建此List个对象。

许多持久性方案在定义类(称为DAOs)的基础上运行,以表示存储在各个表中的数据。使用支持注释类的持久性提供程序(例如Hibernate)可以真正简化与数据库的交互。我会更详细地推荐你research this topic

答案 1 :(得分:3)

您可以使用简单List<java.lang.Object>,因为Java中的所有类都是java.lang.Object的子类。但是,这很容易出错,并且如果您不小心处理它,可能会在运行时抛出ClassCastException。就像你提到的那样List<ClassA>是正确的。但在设计时请确保ClassA的所有内容都正确。

答案 2 :(得分:1)

你可以做的是制作一个抽象超级类,你的所有类都将扩展,然后列出一个。任何扩展这个超类的类都将适合同一个列表。

只需确保在操作集合时找出要处理的对象类型。

public abstract class ClassA {
    // Empty
}

public class ClassB extends ClassA {
    // something something
}

public class ClassC extends ClassA {

}

public class main {
    List<ClassA> list.....
}

答案 3 :(得分:1)

我会这样做,即创建一个表示你要保存的东西的对象(可能隐藏了一个域概念?)然后有一个这种类型的列表。

答案 4 :(得分:1)

创建一个用于保存这些不同类型属性的类的方法似乎很好。 然后,您可以使用ArrayListList接口的实现,如下所示:

ArrayList<ClassA> list = new ArrayList<ClassA>();

然后你可以轻松地填充和操作它。

对于您的数据库操作,我建议您使用 DAO(数据访问对象)类和映射器类来促进对数据源的持久性操作。

答案 5 :(得分:0)

由于Java中的所有对象(具有审核的真实性)都继承自Object,因此您可以编写List<Object>...并在需要时将对象强制转换为对象。请记住,这需要您绝对控制不同对象的类。