6
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'.
   }
}

有可能吗?如果否,请说明原因。

4

3 回答 3

3

Chris Jester-Young 的评论非常好。它说:

你不能。局部变量的静态类型不会保留在字节码中,也不会在运行时保留。(如果它是一个字段,您可以在该字段的包含类上使用反射来获取该字段的类型。)

另请参阅Java 泛型中擦除的概念是什么?

http://gafter.blogspot.com/search?q=super+type+token

于 2012-10-03T07:15:31.593 回答
2

检查Java中持有对象的引用的类名

你不能。

  1. 没有像 '持有对象的引用这样的东西。这样的引用可能为零,或者可能有十六亿个。

  2. 你不能从被持有的物体内部得到它/它们。

于 2012-10-03T08:01:42.813 回答
1

如果您调用a.getClass(),那么它将始终返回您创建此对象的类的实例。在您的情况下,B它会返回您B.class

现在,如果您想调用方法a并获取类,A.class那么您将无法以正常方式进行操作。

一种出路是在A

public static Class<A> getType() {
        return A.class;
    }

然后你可以调用a.getType()which is A.class。我们在这里使用静态方法,因为它们没有被覆盖。

于 2012-10-03T07:06:14.283 回答