这个问题可能看起来很简单,但我还没有找到答案,所以我问堆栈溢出社区.正如标题所示,我有一个带有几个getXXX()方法的类,其中一些方法可能返回null.这是记录在案的,这个类的用户应该知道这个事实.
为了简化这个类的使用,我有想法添加一些方便的hasXXX()方法,指示是否设置了特定的字段.首先,这似乎是一个好主意......但是线程安全会浮现在脑海中.
由于此类的实例可能跨线程共享,因此属性的值可能会更改.我们都知道check-then-act只有在我们知道调用check-method之后状态不会改变时才有可能,即使我们在执行check-then-act之前被打断了.
我想到了以下解决方案:
我不认为这是一个罕见的案例,一些SO成员可能在此之前发现了这个问题,并找到了解决方案......
Foobaerchen
Tim*_*ley 10
没有必要使问题复杂化 - 用户知道XXX是否未设置,因为getXXX()返回null.
if ( (x=bar.getXXX()) ) {
x.foo();
}
Run Code Online (Sandbox Code Playgroud)
是显而易见的
if ( bar.hasXXX() ) {
bar.getXXX().foo();
}
Run Code Online (Sandbox Code Playgroud)
留下了xXX对想象力的真正作用
我肯定会删除这些hasXXX()方法.锁定事物会造成死锁的可能性,并且不容易纠正(更不用说它产生的可能的性能问题).
使用get方法并检查null是否有效,简单,快速,并且是一种众所周知的做事方式.消除NullPointerExceptions 的可能性是值得的,但往往是徒劳的.知道何时放弃它.