我有很多GUI元素类型,并在GUI加载后直接在代码中使用它们。除非GUI加载器需要知道创建它们的现有元素,否则这样就可以了。
public final class VerticalBox extends Element {
...
private static final ElementType type;
static {
type = ElementType.register("VerticalBox",
new ElementType.ICreator() {
@Override
public Element create(GUI gui) {
return new VerticalBox(gui);
}
});
}
@Override
public ElementType getType() {
return type;
}
}
最简单的方法是在每个元素类中创建静态init
函数,但是我需要为每个元素类调用init
。
我在JavaEE中看到了一些注释,但它们似乎正在以相反的方式工作。我可以从annotations
获取所有class
,但不能从classes
获取annotation
。我已经在这个主题上做了很多谷歌搜索。
答案 0 :(得分:0)
你想在这里使用某种依赖注入,它会根据需要初始化。值得一看的是Spring Framework,Google Guice或Pico Container。
在大多数情况下,使用静态块是个坏主意,因为你没有完全控制它们,并且它使得单元测试变得很复杂 - 测试顺序确实很重要。
答案 1 :(得分:0)
也许你对this answer感兴趣,或者,如果你的课程被分成几个罐子,你想要保持独立,ServiceLoader mechanism可能适合你。