如果类B和类C扩展了类A,我有一个类型为B或C的对象,我如何确定它是哪种类型的实例?


当前回答

任何建议的方法的使用都被认为是基于糟糕的OO设计的代码气味。

如果您的设计很好,您应该不会发现自己需要使用getClass()或instanceof。

任何建议的方法都可以,但只是在设计方面要记住一些东西。

其他回答

在“Class”类上还有一个. isinstance方法。如果你通过myBanana. getclass()获得一个对象的类,你可以看到你的对象myApple是否与myBanana via是同一个类的实例

myBanana.getClass().isInstance(myApple)

任何建议的方法的使用都被认为是基于糟糕的OO设计的代码气味。

如果您的设计很好,您应该不会发现自己需要使用getClass()或instanceof。

任何建议的方法都可以,但只是在设计方面要记住一些东西。

你可以使用:

Object instance = new SomeClass();
instance.getClass().getName(); //will return the name (as String) (== "SomeClass")
instance.getClass(); //will return the SomeClass' Class object

HTH。但我认为大多数时候,将其用于控制流或类似的东西并不是一个好的实践……

我在我的GeneralUtils类中使用blow函数,检查它可能有用

    public String getFieldType(Object o) {
    if (o == null) {
        return "Unable to identify the class name";
    }
    return o.getClass().getName();
}
if (obj instanceof C) {
//your code
}