java - 制作不同对象的 Java 列表

标签 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是不同的。

请帮我一下。

最佳答案

Vytenis 的答案在技术上是正确的,但不是您应该定期做的事情。更具可扩展性的解决方案是创建一个接口(interface)并实现两个对象,让列表保存这两个对象,而不会失去静态类型列表通常带来的安全性和优点。虽然Java不喜欢类的多重继承,但实现多个接口(interface)是没有问题的。

例如,以您的类声明为例:

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

并在顶层某处添加以下接口(interface)声明 -

public interface SharedType{
     ...
}

对于要存储的每个对象,让它实现如下接口(interface):

public class Object1 implements SharedType{
    ...
}

当您声明列表时,请像这样声明:

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

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

这不适用于您无法更改其声明的内置类型或类

使用接口(interface)作为类型是 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 静态类型的优势

关于java - 制作不同对象的 Java 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197505/

相关文章:

java - MongoDB-Java 驱动程序 : Catch exception when insert fails

java - 使用什么设计模式或架构来覆盖默认类实例化或创建

java - Hibernate的属性hibernate.default_schema无法正常工作

java - 如何在java中使对象不可变

java - 一个只有静态方法的辅助类的声明应该是什么?

java - 真实世界的用户代理——它们是什么?如何设置它们? - java

java - 从php mysql循环加载图像时对话框不断出现

未处理异常的 Java 问题(带有 lambda 的函数接口(interface))

java - 检索 JPQL、EclipseLink 和 MySQL 中的实体

java - 使用 Jersey 和 Jetty 在独立 Java 应用程序中以编程方式配置 jetty 工作管理器