我有几类,如下所示获得静态初始化块在Java运行时不加载类
public class TrueFalseQuestion implements Question{
static{
QuestionFactory.registerType("TrueFalse", "Question");
}
public TrueFalseQuestion(){}
}
...
public class QuestionFactory {
static final HashMap<String, String > map = new HashMap<String,String>();
public static void registerType(String questionName, String ques) {
map.put(questionName, ques);
}
}
public class FactoryTester {
public static void main(String[] args) {
System.out.println(QuestionFactory.map.size());
// This prints 0. I want it to print 1
}
}
我怎样才能改变TrueFalseQuestion
类以便静态方法总是运行,所以当我运行我的主要方法时,我得到1而不是0。我不希望主要方法发生任何变化。
我实际上是试图实现工厂模式,其中子类注册工厂,但我简化了这个问题的代码。
作为参考,这个设计的目的是避免工厂需要了解问题类(这里:http ://stackoverflow.com/questions/2582357/augment-the-factory-pattern-in-java)。 – 2010-04-06 06:36:16
我没有看到这个问题。有些东西需要了解Question接口的实现,无论是直接的工厂,还是通过某种配置文件。正如我所说的,唯一的另一种方式是遍历类路径中的所有类并查看它们是否实现了问题。在上面的回答中,还要注意关于建立一个不完整的工厂的警告。它现在可能会奏效,但对于未来对象的状态(甚至是现在,跨平台)没有任何保证。 – 2010-04-06 06:52:51