class A {
}
class B extends A {
}
class TestType {
public static void main(String args[]) {
A a = new B();
// I wish to use reference 'a' to check the Reference-Type which is 'A'.
}
}
这可行吗?如果不行,请说明原因。
class A {
}
class B extends A {
}
class TestType {
public static void main(String args[]) {
A a = new B();
// I wish to use reference 'a' to check the Reference-Type which is 'A'.
}
}
Chris Jester-Young的评论非常好。他说:
你不可以。局部变量的静态类型在字节码中和运行时都没有被保留。(如果它是一个字段,你可以使用反射在包含该字段的类上获取字段的类型。)
另请参见Java泛型中擦除的概念是什么?
检查Java中持有对象的引用的类名
你无法做到。
不存在“持有对象的唯一引用”。可能没有这样的引用,也可能有数不清的引用。
你无法从被持有的对象内部获取它们。
a.getClass()
,它将始终返回创建此对象的类的实例。在您的情况下,它是 B
,因此它将返回 B.class
。a
上的方法并获取类作为 A.class
,则无法以正常方式完成。A
中定义方法。public static Class<A> getType() {
return A.class;
}
然后您可以调用 a.getType()
,它是 A.class
。我们在这里使用静态方法,因为它们没有被覆盖。