假设我有以下类:
class A {}
class B extends A {}
A instA = new A();
A instB = new B();
现在,就Java而言,instB属于A类型。
如何找出instB的实际类型是什么?
答案 0 :(得分:4)
您可以使用instB.getClass()
。这将返回表示Class
运行时类型的instB
对象。
来源:javadoc
您还可以对instanceof
使用以下条件检查:
if (instB instanceof B) {
//then we know it is of type B
}
instanceof
将是更传统的方式,如果instB
是B
的子类,条件也将返回true。
您可能希望通过代码示例进一步解释您的用例,以便更好地进行讨论。
答案 1 :(得分:1)
对于编译时,我不知道有任何可能性。这并不容易,因为它依赖于控制流(看声明是不够的)。但是当你编写声明时,你决定只需要instB的类A接口/行为。
对于运行时,您可以使用getClass()
,instanceof
,如Kublai建议的那样。但同样,在大多数情况下你不应该需要它:通过良好的类设计,你可以让动态调度来区分大小写。