【发布时间】:2016-12-12 08:01:09
【问题描述】:
一个程序创建一个带有多个选项卡的 JDialog 面板。其中一个选项卡有几个表。 JTable 具有可调整的列宽。此选项卡是在不同条件下生成的。有时从状态tab 是null,有时选项卡存在,但table 是null。有时用户还没有调整列的大小。
如果用户调整了列的大小,我正在寻找一种方法来保存 columnWidth 值。在这种情况下检查 null 似乎很笨重:
jpanel.tab.table.width
我能找到的最好方法是:
if( jpanel!=null &&
jpanel.jtab!=null &&
jpanel.jtab.jtable!=null && ...
有没有更好的方法来做这个空检查?
我看到了这个问题:
is there a Java equivalent to null coalescing operator (??) in C#?
它没有列出解决方案并且很旧(Java 6-7 时间)。我希望在以后的版本中添加此功能。
【问题讨论】:
-
我的意思是,如果我的
item的毛刺深度为 6-10 级,则此检查看起来不正确。当你应该使用for循环时,感觉就像多次重复相同的代码 -
stackoverflow.com/questions/5223044/… stackoverflow.com/questions/2768054/… stackoverflow.com/questions/271526/avoiding-null-statements 等 tl;dr 要么保留它,要么修复你的逻辑,而不是实现(使用
Optional等) -
您确定需要检查所有级别是否为空吗?如果 null 对于这些字段中的许多字段来说不是有效值,则无需检查,而是让它抛出 NRP 异常。
-
我知道否则我无法说服你,但无论如何,我会坚持使用“笨重”的语法,直到 Java 提供语法糖来缩短它。作为“正常”空值检查的一部分来捕获异常以节省一些击键并不是一个好的权衡,因为它在运行时可能非常低效。它还会在 IDE 中造成非常烦人的调试体验,因为代码会在异常抛出时不断中断。而且使用反射也很糟糕,因为它效率不高,而且如果您重命名/重构字段,您的代码很容易中断。
-
@sstan 实际上,你现在说服了我。较早的答案说“你不能这样做”,而你的评论是“你可以,但这不安全并且是一种不好的做法 - 最好写一个长检查然后养成丢弃异常的习惯”。这应该是一个公认的答案...
标签: java if-statement null