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

问题描述:

我有许多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获得全部annotations,但不能从annotation获得classes。我在这个话题上做了大量的搜索。

你想使用某种依赖注入这里,这将初始化需求的东西。值得关注的是Spring Framework,或者Google Guice或者Pico Container。

在大多数情况下,它的坏主意,有静态块,因为你没有对他们进行全面控制,其复杂的单元测试了很多 - 测试顺序很重要。

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