检查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;
}