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

Java 我应该如何调用类静态初始化?,java,static,annotations,initialization,Java,Static,Annotations,Initialization,我有许多GUI元素类型,在GUI加载后直接在代码中使用它们。除非GUI加载器需要了解现有元素以创建它们,否则这是可以的 public final class VerticalBox extends Element { ... private static final ElementType type; static { type = ElementType.register("VerticalBox", new Elem

我有许多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中看到了一些注释,但它们的工作方式似乎正好相反。我可以从
class
获取所有
annotation
,但不能从
annotation
获取
class
。我在谷歌上搜索了很多这个话题。

你想在这里使用某种依赖注入,它会根据需要初始化东西。值得一看的是Spring框架、GoogleGuice或Pico容器


在大多数情况下,使用静态块是个坏主意,因为您没有对它们的完全控制权,这会使单元测试复杂化—测试的顺序很重要。

您想在这里使用某种依赖项注入,它会根据需要初始化。值得一看的是Spring框架、GoogleGuice或Pico容器


在大多数情况下,使用静态块是个坏主意,因为您不能完全控制它们,这会使单元测试复杂化—测试的顺序很重要。

也许您对静态块感兴趣,或者,如果您的类在多个JAR上分开,您希望保持独立,也许你对这个把戏感兴趣,或者,如果你的类在几个罐子上分开,你想保持独立,那么这个把戏可能适合你