2

我有许多 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,但不能classesannotation。我在这个话题上做了很多谷歌搜索。

4

2 回答 2

0

也许你对这个答案感兴趣,或者,如果你的类被分成几个你想保持独立的 jar,那么ServiceLoader 机制可能对你有用。

于 2012-08-28T09:49:01.870 回答
0

你想在这里使用某种依赖注入,它将按需初始化。值得一看的是 Spring Framework,或者 Google Guice,或者 Pico Container。

在大多数情况下,使用静态块是个坏主意,因为您无法完全控制它们,而且它会使单元测试变得非常复杂 - 测试的顺序确实很重要。

于 2012-08-27T19:40:30.857 回答