繁体   English   中英

Java,获取包含类的Class对象,而不是Runtime Class

[英]Java, Get Class object for containing class, Not Runtime Class

考虑这个Java代码

class A{
 //@returns Class object this method is contained in
 // should be A in this case
 public Class<?> f() {
   return getClass();
 }
}

class B extends A {}

B b = new B();

System.out.println(b.f());
//output -- B.class (Wrong, should be A.class)

f()里面我不能使用getClass()因为这会给我一个runtype,即B 我正在寻找一种方法来获取class f()Class对象在里面(显然没有明确提到A

new Object() {}.getClass().getEnclosingClass() 但请不要!

您可以使用异常堆栈跟踪工具来执行以下操作:

public String f() {
    Exception E = new Exception();
    E.fillInStackTrace();
    return E.getStackTrace()[0].getClassName(); // load it if you need to return class
}

我不得不说,简单地返回A.class就像@mmyers建议的那样简单明了。 如果您实际上不想要运​​行时值,那么在运行时尝试派生它没有多大意义。 出现的唯一问题是,如果您重构类的名称,并且在同一个包中存在同名的另一个。

为了清楚起见,我现在就抓住这个机会了。

您可以使用

class.getMethod("f",parameterTypes).getDeclaringClass()

我知道你说你不想明确提到A.class

class A {        
    public Class<?> f() {
        return A.class;
    }   
}

但我很难找到一个上述代码不满意的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM