在不使用构造函数的情况下获得一个子类的java.lang.Class实例

By simon at 2018-02-07 • 0人收藏 • 44人看过

情况就像下面描述的那样:我得到了一个抽象类,包含字段和 方法和访问全部(AModule)。我去另一个阶级正在扩大 这个抽象类(例如TestModule),但是我不知道/不能得到 th的java.lang.Class实例是超类中的子类而不使用a 构造函数完全提供这个实例。子类型不总是 same,这只是一个例子,它现在变成了:

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
    }
}
我需要这个子类实例来获取所有的字段和方法分析和 通过反射调用它们,如注释所定义的。有没有人有一个想法 为了解决这个问题找回答错误的构造函数,没有这个超级调用 与子类实例? 提前致谢 :)

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

这很简单:

class Base {
  void foo() {
    ... x = getClass();
class Child extends Base {
  void bar() {
    ... x = getClass();
两个方法富和酒吧... getClass()的result是类 的这个。 换句话说:当你在* Base 对象上调用foo / bar时,那么getClass() 返回 Base 。如果在孩子对象,在这两种方法中,结果 是孩子*。 含义:只需使用getClass()而不是硬编码的类名在 构造器!

登录后方可回帖

Loading...