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

检查Java中包含对象的引用的类名,java,Java,有可能吗?如果否,请指定原因。如果调用a.getClass(),则它将始终返回创建此对象的类的实例。在您的情况下,它是B,因此它将返回B.class 现在,如果您想调用a上的方法,并将类设置为a.class,那么您将无法以正常方式执行此操作 一种解决方法是在A class A { } class B extends A { } class TestType { public static void main(String args[]) { A a = new B();

有可能吗?如果否,请指定原因。

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

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

一种解决方法是在
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'.
   }
}
公共静态类getType(){
返回A.class;
}
然后可以调用
a.getType()
,它是
a.class
。我们在这里使用静态方法,因为它们不会被重写。

非常好。它说:


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

另见

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

你不能

  • 不存在“持有对象的引用”这样的东西。这样的参考文献可能是零,也可能是六千一百万

  • 你无法从被持有的物体内部获得它/它们


  • 你不能。局部变量的静态类型不会保留在字节码中,也不会保留在运行时。(如果它是一个字段,您可以使用对该字段的包含类的反射来获取该字段的类型。)@ChrisJester Young您应该回答这个问题,而不是注释。但是为了保持一致性,需要将此方法添加到每个类中,因此,当调用getType时,将为类
    B
    调用该方法。更新了答案以使用静态方法。是的,解决方案有效。:)这是一个非常优雅和简单的解决方案。静态方法不会被重写,因此在使用该方法时没有问题。
    public static Class<A> getType() {
            return A.class;
        }