繁体   English   中英

列出Java不同的对象

[英]Make a list of different objects 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));

显然,对象1和对象2是不同的。

拜托,请帮我一下。

从技术上讲,Vytenis的回答是正确的,但您不应定期这样做。 更具扩展性的解决方案是创建一个接口并同时实现两个对象,让列表保留两个对象,而不会失去通常与静态类型列表一起提供的安全性和优点。 尽管Java不喜欢从类继承多个继承,但是实现多个接口是没有问题的。

例如,使用您的类声明:

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

并在顶层某个位置添加以下接口声明-

public interface SharedType{
     ...
}

对于要存储的每个对象,让其实现如下接口:

public class Object1 implements SharedType{
    ...
}

声明列表时,请像下面这样声明:

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

或您要创建的任何类型的列表,显然不必是数组列表

这对于无法更改声明的内置类型或类不起作用

在Java中,通常将接口用作类型,例如,请参见http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html

编辑

如果您需要存储不同的内置类型(如Strings和Integers),如注释中所建议,请考虑在它们周围创建一个包装对象。 这有点麻烦,但是您不能轻易更改内置类的声明,并且使用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静态类型的优势

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM