首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Java中持有对象的引用的类名

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

Stack Overflow用户
提问于 2012-10-03 14:51:58
回答 3查看 1.6K关注 0票数 6
代码语言:javascript
复制
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'.
   }
}

这是可能的吗?如果没有,请说明原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-03 15:06:14

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

现在,如果你想在a上调用方法,并以A.class的形式获取类,那么你就不能用正常的方式来做了。

一种解决办法是在A中定义方法

代码语言:javascript
复制
public static Class<A> getType() {
        return A.class;
    }

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

票数 1
EN

Stack Overflow用户

发布于 2012-10-03 15:15:32

Chris Jester-Young's comment非常优秀。上面写着:

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

另请参阅What is the concept of erasure in generics in Java?

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-03 16:01:43

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

你不能这么做。

  1. 没有‘持有对象的引用。可能没有这样的引用,也可能有上千个引用。
  2. 你不能从被持有的对象内部获取它/它们。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12703285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档