检查包含Java中对象的引用的类名

时间:2012-10-03 06:51:58

标签: java

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

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

3 个答案:

答案 0 :(得分:3)

Chris Jester-Young's comment非常好。它说:

  

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

另见What is the concept of erasure in generics in Java?

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

答案 1 :(得分:2)

  

检查包含Java对象的引用的类名

你不能。

  1. 没有“ 引用持有对象的东西。可能没有这样的参考,或者可能有六十亿个。

  2. 你无法从持有的对象中获取它们。

答案 2 :(得分:1)

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

现在,如果您想在a上调用方法并将课程设为A.class,那么您将无法以正常方式执行此操作。

一种方法是在A

中定义方法
public static Class<A> getType() {
        return A.class;
    }

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