如何获得实例中最具体的类?

时间:2011-09-17 07:57:21

标签: java types

假设我有以下类:

class A {}
class B extends A {}

A instA = new A();
A instB = new B();

现在,就Java而言,instB属于A类型。

如何找出instB的实际类型是什么?

2 个答案:

答案 0 :(得分:4)

您可以使用instB.getClass()。这将返回表示Class运行时类型的instB对象。

来源:javadoc

您还可以对instanceof使用以下条件检查:

if (instB instanceof B) {
    //then we know it is of type B
}

instanceof将是更传统的方式,如果instBB的子类,条件也将返回true。

您可能希望通过代码示例进一步解释您的用例,以便更好地进行讨论。

答案 1 :(得分:1)

对于编译时,我不知道有任何可能性。这并不容易,因为它依赖于控制流(看声明是不够的)。但是当你编写声明时,你决定只需要instB的类A接口/行为。

对于运行时,您可以使用getClass()instanceof,如Kublai建议的那样。但同样,在大多数情况下你不应该需要它:通过良好的类设计,你可以让动态调度来区分大小写。