我们尝试使用Guice重构项目。这个想法是将所有语言接口(interface)绑定(bind)到诸如法语或波兰语这样的创建对象。
我们有一个绑定(bind)模块:
public class StandardModule extends AbstractModule {
@Override
protected void configure() {
bind(Language.class).to(Polish.class);
}
}
还有一个使用此注入(inject)对象的类(AboutDialog.java):
@Inject Language language;
public AboutDialog(JFrame parent) {
super(parent, "", true);
this.language=language;
this.setTitle(language.getLanguageInUse().getString("AboutDialog.title"));
this.parent = parent;
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
pack();
}
结果是:
java.lang.NullPointerException at net.sf.jmoney.gui.AboutDialog.<init>(AboutDialog.java:67)
67行是:
this.setTitle(language.getLanguageInUse().getString("AboutDialog.title"));
我们的界面是:
public interface Language {
public ResourceBundle getLanguageInUse();
}
波兰语类是:
public class Polish implements Language {
private ResourceBundle languageInUse;
public Polish() {
languageInUse = ResourceBundle.getBundle(Constants.LANGUAGE_PL);
}
public ResourceBundle getLanguageInUse() {
return languageInUse;
}
}
我们迷路了...
最佳答案
我假设您不是在Guice的帮助下创建AboutDialog
。
您可以做的是使用injector.injectMembers(this)
,其中this
是AboutDialog
。
最好的方法是,Guice将创建AboutDialog
,因此将注入(inject)所有成员。