![]() |
1
10
不需要使事情复杂化——用户知道是否设置了xxx,因为getxxx()返回空值。
是解说
把hasxxx真正做的留给想象 |
![]() |
2
5
我肯定会把
使用get方法和检查是否为空工作是一种简单、快速的方法,也是一种众所周知的方法。消除
|
![]() |
3
3
不管怎样,你会遇到这个问题,即使你只有
对于可能随时被其他线程更改的字段,不应该有getter。唯一的例外是,当一个线程需要检查某个线程是否可用或由另一个线程完成时,例如,轮询用于线程之间通信的线程安全消息队列,或检查任务是否完成。 通常,将锁定限制在一些用于在线程之间交换信息的选择类的内部实现上。不要在线程之间共享任何其他可变对象。 |
![]() |
4
1
看看如何使该对象不可变,并在其中 HASXXX() 方法记录状态的对象。不确定这是否是一个选项,因为您可能已经在使用一个系统,但它也有助于良好的OO实践。 |
![]() |
5
1
在500 KLoC Java项目中,我们使用TryGETXXX()语法来返回空值的方法。每个字段的名称中都有显式的空权限,并使用yyyornull语法进行编码。然后使用静态分析工具minik检查是否在不允许空值的分支中执行对对象的访问。 不再有NPE问题:) 所有结构的不可变性保证了线程的安全性。 http://www.mimuw.edu.pl/.../JC-TS-AGS-AS_Minik-A-tool-for-maintaining-proper-Java-code-structure.pdf http://ocean.comarch.com/genrap/ |
![]() |
6
1
C++解决方案是由
|
![]() |
7
0
如果类的使用者知道如果不设置值,这些值将为空…那么我不担心提供
让使用者调用get方法,检查空值,并让他们相应地处理它。 |
![]() |
8
0
只有当null是一个完全有效的值时,使用hasxxx()方法才是合乎逻辑的。基本上,hasxxx()只会实际地说它甚至没有要返回的空值。如果hasxxx()只是用来检查getxxx()是否返回空值,那么您的逻辑有问题,您将非常需要来自星球Vulcan的人!;-) has/getxxx()组合的另一个问题是hasxxx()可能表示它有一个值,但另一个线程刚刚释放了数据,因此getxxx()将返回空值。这将是一个严重的线程问题,您只能通过在整个has/getxxx()代码块周围添加一个锁来解决。 不过,您可以通过创建一个组合函数来解决这个问题,该函数可以调用biggetxxx(),该函数首先设置锁,调用hasxxx()检查值,然后调用getxxx()检索值。如果没有值,它将返回空值,因此调用方必须检查值空值… 但是,这是没有意义的,因为您可以调用getxxx()立即获得结果或空值。:-)或添加一个bighasxxx()方法,该方法将检查biggetxxx()是否返回空值。然后您将围绕这些内容创建一个新的函数,这样就可以再次保证线程安全。例如verybiggetxxx()…这样的代码层数是没有尽头的… 只需终止hasxxx()方法即可。 它们毫无用处。 |
![]() |
9
0
1.
如果你
我将返回一个特殊的常量值来指示“已设置但为空”。例如:
只要你不
实习生
返回的字符串值,
或者,您可以反向使用该技术,这样一个特殊的值(例如
|
![]() |
10
0
有两个可能的原因介绍
如果你通常需要
|
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |