如何从基类实例中找出子类?
2022-09-03 00:03:25
有没有办法从基类实例中找出派生类的名称?
例如:
class A{
....
}
class B extends A{
...
}
class c extends A{
...
}
现在,如果一个方法返回一个对象,我能找出它是否是类型或?A
B
C
有没有办法从基类实例中找出派生类的名称?
例如:
class A{
....
}
class B extends A{
...
}
class c extends A{
...
}
现在,如果一个方法返回一个对象,我能找出它是否是类型或?A
B
C
使用或instanceof
Class#getClass()
A returned = getA();
if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }
getClass()
将返回以下任一项: , ,A.class
B.class
C.class
在 if 子句中,您需要向下转换 - 即
((B) returned).doSomethingSpecificToB();
也就是说,有时认为使用或是一种不好的做法。您应该使用多态性来避免检查具体子类的需要,但是我无法通过给出的信息告诉您更多。instanceof
getClass()
您是否尝试过使用instanceof
例如:
Class A aDerived= something.getSomethingDerivedFromClassA();
if (aDerived instanceof B) {
} else if (aDerived instanceof C) {
}
//Use type-casting where necessary in the if-then statement.