对任意(通用)对象的引用

时间:2013-10-04 14:57:38

标签: java

我一直在尝试用Java模拟Python列表;即,维护动态阵列,其可以同时存储不同类型的对象。 Java中是否有任何方法可以使用通用对象引用,即可以指向任何类型的对象,用户定义或内置的对象引用?

2 个答案:

答案 0 :(得分:5)

我认为你误解了Python中的列表。虽然可以保存不同类型的对象,但它们并非旨在:Python列表被设计为同质数据结构。相比之下,元组意味着异构(并且那些是不可变的)。

您可以通过执行以下操作来模仿Java中的元组:

class Tuple1<A> { 
    private final A a; 
    public Tuple1(A a) { 
        this.a = a; 
    } 
}

class Tuple2<A, B> { 
    private final A a; 
    private final B b; 
    public Tuple2(A a, B b) { 
        this.a = a; 
        this.b = b; 
    } 
}

class Tuple3<A, B, C> { 
    private final A a; 
    private final B b; 
    private final C c;
    public Tuple3(A a, B b, C c) { 
        this.a = a; 
        this.b = b;
        this.c = c; 
    } 
}

...

您可以考虑使用Tuple基类或具有index()方法的接口以及重载的静态工厂方法。

可以使用Object类型的变量来存储任何和所有实例。但是,这很少是你想要做的。你应该把它缩小到你试图存储和使用它的内容,而不是Object

答案 1 :(得分:2)

Java中的所有内容都扩展为Object,因此您始终可以List<Object>存储任何类型的Object

也就是说,Java泛型的全部原因是因为在同一个ObjectArray中存储不同类型的List或其他(除了极少数例外)真的< / em>错误的编程实践,因为它倾向于混淆意义并使事情更难以维护