我应该如何调用类静态初始化?

时间:2012-08-27 19:37:37

标签: java static annotations initialization

我有很多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。我已经在这个主题上做了很多谷歌搜索。

2 个答案:

答案 0 :(得分:0)

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

在大多数情况下,使用静态块是个坏主意,因为你没有完全控制它们,并且它使得单元测试变得很复杂 - 测试顺序确实很重要。

答案 1 :(得分:0)

也许你对this answer感兴趣,或者,如果你的课程被分成几个罐子,你想要保持独立,ServiceLoader mechanism可能适合你。