Приведение класса объекта - PullRequest
3 голосов
/ 04 февраля 2010

Мой предыдущий опыт ООП был с 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 ]

10 голосов
/ 04 февраля 2010

В Java 5 и новее генерируются типы коллекций.Таким образом, у вас будет следующее:

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

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

Обычно не рекомендуется иметь ArrayList с Object, если вам не нужен ваш ArrayList, чтобы иметь возможность хранить различные типы Objects,Обычно это не так, и вы можете использовать гетерогенные коллекции для повышения безопасности типов.

5 голосов
/ 04 февраля 2010

для традиционного литья, учтите это:

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

в более поздних версиях Java, Generics были представлены, что устраняет необходимость в такого рода тестах.

1 голос
/ 04 февраля 2010

Чтение раздела о приведении из Учебника Java должно ответить на этот вопрос.

(Или, если вы объявите ArrayList самостоятельно, используйте параметр типа подходящего типа, как предлагает Данбен =

0 голосов
/ 04 февраля 2010

Вам нужно разыграть Object яблоко до Apple.

((Apple)apple).doSomething();

Но в данном конкретном случае лучше использовать;

for(Apple apple : apples){
    apple.doSomething();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...