我正在开发一个项目,其中有一个继承自抽象类Generator
的类列表。它的工作方式类似于责任链,其中每个类在另一个类之后实例化,调用generate()
方法。唯一特别的事情是每个Generator
被传递给下一个,以便下一个能够调用前一个方法的某些方法,以确保它继续其工作采用相同的假设。
通过这种设置,我想允许链上的每个类确定前一个必须实现的接口,以便它知道它可用的方法。
如果类没有实现这样的接口,只会显示一个错误(它是一个命令行工具)。
我一直在研究几种可能性,但我真的不知道如何正确实现这一点。你能想到在编译时这样做的方法吗?我是否需要执行instanceof
等运行时检查?
我在这里留下一些骨架代表我现在所拥有的东西,万一它有所帮助。
public abstract class Generator {
protected Generator(Object somePrivateStuff) {/* ... */}
public abstract void generate();
}
public class SpecialGenerator extends Generator {
protected SpecialGenerator(Object o) { super(o); }
public void generate() {
// Some actual implementation
}
}
public class Main {
public static void main(String[] args) {
// Dynamically load all the classes extending Generator
// via the Reflections library, and call the method generate()
// on each one
}
}
任何想法都将受到赞赏。提前谢谢。
答案 0 :(得分:0)
如果动态加载类,e。 G。通过angular2-polyfills.js
名称,String
是无用的,因为您在编译时不了解它们。相反,您应该使用Class#isAssignableFrom()
:
instanceof
在不知道应该如何执行实例化的情况下,很难建议更详细的代码。