类型转换后“找不到符号”

时间:2012-01-02 22:57:33

标签: java casting

我有两个Java类。第一个实现以下方法:

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

第二个班级Foo提供bar方法。

现在的问题是我在o.bar();电话上收到“找不到符号”编译错误。

我做错了什么,我怎么能实现bar方法的调用? 感谢

4 个答案:

答案 0 :(得分:4)

o被声明为Object

将一个铸造实例放入其中不会改变它;您只能调用变量的编译时类型中存在的方法。

您需要声明一个Foo类型的新变量。

答案 1 :(得分:4)

您的o是对Object的引用,而不是Foo。由于FooObject的子类型,其他任何类都可以投放,但o仍然是对Object的引用。

你想要的是((Foo) o).bar();

答案 2 :(得分:4)

o = (Foo) o;

将其更改为:

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

它会起作用

答案 3 :(得分:2)

编译器尝试使用此语句o.bar();调用Object类中的方法,因为您已将o声明为Object,但在此处不可用导致找不到符号编译器错误。你需要这样的东西((Foo) o).bar();