java – 没有初始化标记为@NotNull的final字段
|
我有这个代码: public static class MyWebDriver extends RemoteWebDriver {
@NotNull
private final String nodeId;
public MyRemoteWebDriver(@NotNull String nodeId) {
super();
this.nodeId = nodeId;
}
@Override
public void quit() {
System.out.println("deleting node: " + nodeId);
}
}
并保证传递给构造函数的nodeId不为空.并且因为nodeId字段是final,我希望它可以在我的quit()方法中初始化. 但是,在super()构造函数中有一个try-catch块,在异常调用quit()方法的情况下会抛出异常.在这种情况下,我在我的quit()方法中得到的nodeId没有初始化(具有空值). 有什么办法可以避免吗? @Override
public void quit() {
if (nodeId != null) {
System.out.println("deleting node: " + nodeId);
}
}
这个?这看起来很愚蠢,因为nodeId被标记为@NotNull. 解决方法
这是两个问题: >构造函数不应该执行任何工作,除非在(final)成员变量中存储给定的参数. [编辑]
“不应该做任何工作”我的意思是构造函数不应该从参数中计算任何属性值,也可以调用依赖关系或非公共方法进行检查. 你遇到这个问题的原因是违反单一责任模式和分离关切. 在超类构造函数中做什么应该最有可能在一个单独的类中完成,只有该过程的结果应该被传递到你的类(和它的超类)中. 这显然意味着quit()方法也属于一个不同的类. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
