«Не удается найти символ» после приведения типа - PullRequest
1 голос
/ 03 января 2012

У меня есть два класса Java. Первый реализует следующий метод:

@Override public void onView(Object o) {
    o = (Foo) o;
    o.bar();
}

Второй класс Foo предоставляет метод bar.

Проблема теперь в том, что я получаю ошибку компиляции «Cannot find symbol» при вызове o.bar();.

Что я делаю не так и как я могу добиться вызова метода bar? Спасибо

Ответы [ 4 ]

4 голосов
/ 03 января 2012

Ваш o является ссылкой на Object, а не Foo.Приведение работает, поскольку Foo является подтипом Object, как и любой другой класс, но o остается ссылкой на Object.

То, что вы хотите, это ((Foo) o).bar();

4 голосов
/ 03 января 2012

o = (Foo) o;

измените его на:

Foo f = (Foo) o;
f.bar();

это будет работать

4 голосов
/ 03 января 2012

o объявлено как Object.

Помещение приведенного экземпляра в него не меняет этого;Вы можете вызывать только методы, которые существуют для переменной тип времени компиляции .

Вам необходимо объявить новую переменную типа Foo.

2 голосов
/ 03 января 2012

Компилятор пытается вызвать метод в классе Object с помощью этого оператора o.bar();, потому что вы объявили o как объект, который там недоступен, что приводит к Не удается найти символ ошибка компилятора. вам нужно что-то вроде этого ((Foo) o).bar();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...