我们尝试用Guice重构一个项目.这个想法是将所有的语言界面绑定到像法语或波兰语这样的混合对象.
我们有一个绑定模块:
public class StandardModule extends AbstractModule { @Override protected void configure() { bind(Language.class).to(Polish.class); } }
和一个使用这个注入对象的classe(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.
你可以做的是使用inject.injectMembers(this)这里是AboutDialog.
最好的方法是将由Guice创建AboutDialog,因此所有成员将被注入.