列出不同的Java对象列表

时间:2014-10-04 21:46:10

标签: java

我试图列出不同的对象。

我知道我可以列出一些对象,例如:

ArrayList<Matrices> list = new ArrayList<Matrices>();
list.add( new Matrices(1,1,10) );
list.add( new Matrices(1,2,20) );

但我想制作一个可以做到这样的事情的清单:

list.add (new Object1(a,b,c));
list.add (new Object2(e,f));

显然,Object1和Object2是不同的。

拜托,请帮我一把。

2 个答案:

答案 0 :(得分:3)

维特尼斯&#39;答案在技术上是正确的,但不是你应该定期做的事情。更具扩展性的解决方案是创建一个接口并实现两个对象,让列表保存两个对象,而不会失去静态类型列表通常带来的安全性和优势。虽然Java不喜欢来自类的多重继承,但实现多个接口是没有问题的。

例如,接受你的类声明:

class Object1{
    ...
}
...
class Object2{
    ...
}

并在顶层添加以下接口声明 -

public interface SharedType{
     ...
}

对于您要存储的每个对象,让它实现如下界面:

public class Object1 implements SharedType{
    ...
}

当您声明列表时,请按以下方式声明:

List<SharedType> mylist = new ArrayList<SharedType>();

或者您尝试创建的任何类型的列表,显然它不一定是一个arraylist

这对内置类型或类别的工作不会起作用,他们声明你无法改变

使用接口作为类型是Java中的常见做法,请参阅http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html,例如

修改

如果您需要存储不同的内置类型(如字符串和整数),请按照注释中的建议,考虑在它们周围创建一个包装器对象。这有点麻烦,但是您无法轻易更改内置类的声明,并且使用像Object这样的泛型类型应该是最后的手段,因为它颠覆了在类中需要类型规范的原因。第一名。

例如,

interface Wrapper{}

class StringWrapper extends Wrapper{
    String s;

    public StringWrapper(String s){
        this.s = s;
    }
}

class IntWrapper extends Wrapper{
    String i;

    public StringWrapper(Integer i){
        this.i = i;
    }
}

有人在查看您的代码(包括您,稍后),现在将确切地知道您在列表中尝试使用的内容。您还可以获得Java静态类型的优势

答案 1 :(得分:2)

使用List<Object>,您可以存储任何内容。