加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 最佳实践:hasXXX()方法可能返回null的getXXX()方法

发布时间:2020-12-15 01:59:28 所属栏目:Java 来源:网络整理
导读:这个问题可能看起来很简单,但我还没有找到答案,所以我问堆栈溢出社区.正如标题所示,我有一个带有几个getXXX()方法的类,其中一些方法可能返回null.这是记录在案的,这个类的用户应该知道这个事实. 为了简化这个类的使用,我有想法添加一些方便的hasXXX()方法,指
这个问题可能看起来很简单,但我还没有找到答案,所以我问堆栈溢出社区.正如标题所示,我有一个带有几个getXXX()方法的类,其中一些方法可能返回null.这是记录在案的,这个类的用户应该知道这个事实.

为了简化这个类的使用,我有想法添加一些方便的hasXXX()方法,指示是否设置了特定的字段.首先,这似乎是一个好主意……但是线程安全会浮现在脑海中.

由于此类的实例可能跨线程共享,因此属性的值可能会更改.我们都知道check-then-act只有在我们知道调用check-method之后状态不会改变时才有可能,即使我们在执行check-then-act之前被打断了.

我想到了以下解决方案:

>为此类用户提供一种在执行check-then-act代码时“锁定”状态更改实例的方法.
>删除hasXXX()方法,因为它们对可变类没用.

我不认为这是一个罕见的案例,一些SO成员可能在此之前发现了这个问题,并找到了解决方案……

Foobaerchen

解决方法

没有必要使问题复杂化 – 用户知道XXX是否未设置,因为getXXX()返回null.

if ( (x=bar.getXXX()) ) {
   x.foo();
}

是显而易见的

if ( bar.hasXXX() ) {
  bar.getXXX().foo();
}

留下了xXX对想象力的真正作用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读