如何进行安全的向下转换并防止出现ClassCastException

cod*_*joe 4 java casting downcast

我有以下场景:

public class A {
}

public class B extends A {
}

public class C extends B {
    public void Foo();
}
Run Code Online (Sandbox Code Playgroud)

我有一个方法可以返回类A,BC,我想安全地转换为C,但只有在类类型为C时.这是因为我需要调用Foo()但我不想要ClassCastException.

Sim*_*son 7

你能做这个吗?

if (obj instanceof C) {
   ((C)obj).Foo();
}
else {
   // Recover somehow...
}
Run Code Online (Sandbox Code Playgroud)

但是,请参阅此问题中的其他一些注释,因为过度使用instanceof有时(并不总是)表示您需要重新考虑您的设计.