转换对象的类

时间:2010-02-04 00:19:25

标签: java

我以前的OOP经验是使用Objective-C(动态类型),但是,我现在正在学习Java。我想迭代对象的ArrayList并对它们执行某种方法。 ArrayList中的每个对象都属于同一个类。在Objective-C中,我只是在每次迭代中检查对象是否是正确的类,然后运行该方法,但这种技术在Java中是不可能的:

for (Object apple : apples) {
        if (apple.getClass() == Apple.class) {
            apple.doSomething(); //Generates error: cannot find symbol
        }
    }

如何“告诉”编译器ArrayList中的对象属于哪个类?

4 个答案:

答案 0 :(得分:10)

在Java 5及更高版本中,collecton类型是通用的。所以你会有这个:

ArrayList<Apple> a = getAppleList(); // list initializer

for (Apple apple : a) {
    apple.doSomething();
}

除非您特别需要ArrayList能够容纳不同类型的Object,否则ArrayList的{​​{1}}通常不是优秀做法。通常情况并非如此,您可以使用异类集合来提高类型安全性。

答案 1 :(得分:5)

对于传统铸造,请考虑以下事项:

for (Object apple : apples) {
    if (apple instanceof Apple) { //performs the test you are approximating
        ((Apple)apple).doSomething(); //does the cast
    }
}

在Java的更高版本中,引入了Generics,无需进行这些类型的测试。

答案 2 :(得分:1)

阅读section on casting from the Java Tutorial应该回答这个问题。

(或者,如果您自己声明ArrayList,请使用approapriate类型参数,因为danben suggest =

答案 3 :(得分:0)

您需要将Object apple投射到Apple

((Apple)apple).doSomething();

但在这种特殊情况下,最好使用;

for(Apple apple : apples){
    apple.doSomething();
}