java静态类加载不到_获取静态初始化块以在不加载类的情况下在java中运行

要在工厂中注册TrueFalseQuestion类,需要调用其静态初始化程序.要执行TrueFalseQuestion类的静态初始化程序,需要引用该类,或者需要在调用QuestionFactory.map.size()之前通过反射加载该类.如果要保持main方法不变,则必须引用它或通过QuestionFactory静态初始化程序中的反射加载它.我不认为这是一个好主意,但我只会回答你的问题:)如果你不介意QuestionFactory知道实现Question的所有类来构造它们,你可以直接引用它们或通过它们加载它们反射.就像是:

public class QuestionFactory {

static final HashMap map = new HashMap();

static {

this.getClassLoader().loadClass("TrueFalseQuestion");

this.getClassLoader().loadClass("AnotherTypeOfQuestion"); // etc.

}

public static void registerType(String questionName, String ques ) {

map.put(questionName, ques);

}

}

确保map的声明和构造在静态块之前.如果您不希望QuestionFactory对Question的实现有任何了解,则必须将它们列在由QuestionFactory加载的配置文件中.我能想到的唯一其他(可能是疯狂的)方法是查看实现Question :)的类的整个类路径.如果所有实现Question的类都需要属于同一个包,那么这可能会更好 – 注意:我不赞同这个解决方案;)

我不认为在QuestionFactory静态初始化程序中执行任何操作的原因是因为像TrueFalseQuestion这样的类有自己的静态初始化程序,它们调用QuestionFactory,在那时它是一个不完整构造的对象,这只是一个问题.有一个配置文件只是列出你想让QuestionFactory知道如何构造的类,然后在它的构造函数中注册它们是一个很好的解决方案,但它意味着改变你的主方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值