我有这段代码:
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
不为null
,并且由于nodeId
字段是final
,我期望在我的quit()
方法中对其进行初始化。
但是,在super()
构造函数中有一个try-catch
块,如果出现异常,则调用quit()
方法并抛出异常。 在这种情况下,我在quit()
方法中获取的nodeId
未被初始化(具有null
值)。
除了在super()
调用之前手动初始化nodeId
,还有其他避免这种情况的方法吗?
@Override
public void quit() {
if (nodeId != null) {
System.out.println("deleting node: " + nodeId);
}
}
这个?看起来相当愚蠢,因为nodeId
被标记为@NotNull
。
System.out.println()
而不是依赖于nodeId
值的实际代码。这就是我想要避免的原因。 - esin88RemoteWebDriver
类不是我的,它来自于org.openqa.selenium.remote
包。 - esin88openqa
项目(不管它是什么)在构造函数中调用了一个非final
方法?看起来这应该是一个bug声明,显然目前这并没有让你的生活变得更轻松。 - Eugene