如何从Java对象中扩展抽象类来运行抽象方法?

时间:2016-01-26 20:03:07

标签: java

我试图通过Class对象调用抽象方法。

所以我的抽象类如下:

public abstract class Module implements SimpleModule{

    public abstract void run();

}

现在我有一个实现这个抽象类的类。

我已经使用Reflection来让所有类实现我的抽象类'模块'。我已将所有结果存储如下:

private Set<Class<? extends Module>> modules = new HashSet<>();

现在我想知道的是如何运行抽象方法&#39; run()&#39;在抽象类&#39;模块&#39;中定义通过这张地图。我做了一个循环,循环遍历所有这些类,如下所示:

for(Class<? extends Module> clazz : modules){
    //Here I want the 'run' method to be called.
}

任何人都可以帮我吗?我会很感激。感谢

1 个答案:

答案 0 :(得分:0)

我认为你应该这样做。

  1. 定义抽象Module类的一些具体实现,这样您实际上可以使用某些已定义的行为调用run()
  2. 存储对象本身而不是类,因为虽然所有类都可能是Module的实例,但您需要稍后转换它们以获取特定类的已定义run()行为。
  3. 具体实施示例

    class MyModule extends Module {
         public void run() {
             // TODO: Implement this
         }
    }
    

    然后,在代码的其余部分中,您可以使用简单的接口来定义集合,以表明此集合包含实现SimpleModule的任何内容,我认为这是run()方法最初的位置从。

    Set<SimpleModule> modules = new HashSet<>();
    modules.add(new MyModule());  
    
    for(SimpleModule m : modules){
        m.run();
    }