0

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

4

2 回答 2

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.

于 2013-10-04T15:01:33.443 回答
2

Java 中的一切都是扩展Object的,因此您始终List<Object>可以存储任何类型的Object.

也就是说,Java 泛型的全部原因是因为将不同类型的存储Object在相同的ArrayList其他的(除了极少数例外)中是非常糟糕的编程实践,因为它往往会混淆含义并使事情更难维护

于 2013-10-04T15:00:33.833 回答