首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不使用构造函数获取子类的java.lang.Class实例

不使用构造函数获取子类的java.lang.Class实例
EN

Stack Overflow用户
提问于 2018-02-06 21:49:54
回答 1查看 169关注 0票数 0

情况如下:我得到了一个包含字段和方法的抽象类,并且可以访问所有这些字段和方法(AModule)。我得到了另一个扩展这个抽象类的类(例如TestModule),但是我不知道/不能在超类中获得这个子类的java.lang.Class实例,除非使用一个构造函数来准确地传递这个实例。子类类型并不总是相同的,这只是一个例子,它目前是如何产生的:

代码语言:javascript
复制
public abstract class AModule
{

   private Class<? extends AModule> clazz;

   public AModule(Class<? extends AModule> clazz)
   {
       this.clazz = clazz;
       //this.getClass() will return AModule.class
   }

   public Method resolve()
   {
       return this.clazz.getDeclaredMethods()[0];
       //I want get the fields and methods; e.g. foo() of TestModule
   }

}

public class TestModule extends AModule
{

    public TestModule()
    {
        super( TestModule.class );
    }

    public void foo()
    {
       //code
    }

}

public class ModuleLoader
{
    public static void resolveModule(AModule module)
    {
        //at this point I don't know the class TestModule
        //but I want to invoke foo()
        module.resolve().invoke(module); 
        //module.getClass() will return AModule.class
    }
}

我需要这个子类实例来获取所有字段和方法,以通过注释定义的反射来分析和调用它们。有没有人有办法解决这个问题,在没有这个子类实例的超级调用的情况下,找回默认的构造函数?

提前感谢:)

EN

回答 1

Stack Overflow用户

发布于 2018-02-06 21:55:34

它实际上相当简单:

代码语言:javascript
复制
class Base {
  void foo() {
    ... x = getClass();

代码语言:javascript
复制
class Child extends Base {
  void bar() {
    ... x = getClass();

中,方法foo()bar() ...getClass()的结果是this的类。

换句话说:当您在基本对象上调用foo/bar时,getClass()将返回基本。如果在对象上调用,在这两种方法中,结果都是

含义:只需使用getClass()而不是在该构造函数中硬编码类名!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48644646

复制
相关文章

相似问题

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