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()方法也属于一个不同的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Spring-boot:不能使用持久性
- Java IO – 在写入其他应用程序时读取一个大文件
- UNDERSTANDING VOLATILE VIA EXAMPLE--reference
- java通过ServerSocket与Socket实现通信
- Android 时间对话框 TimePickerDialog
- JAVA_HOME环境变量存在的原因是什么?
- java – eCobertura在Eclipse中无法正常工作
- javax.mail.AuthenticationFailedException:连接
- 如何在javac / java类路径中添加多个.jar文件 –
- java – 如何在jBoss AS 7中配置静态资源