程序将创建一个带有多个选项卡的JDialog面板。选项卡之一具有多个表。JTable的列宽可调。此选项卡是在不同条件下生成的。有时,从国家tab
的null
,有时标签存在,但table
为null
。有时用户尚未调整列的大小。
我在寻找一种方法来保存columnWidth值,如果用户调整了列的大小。在这种情况下,检查null似乎很麻烦:
jpanel.tab.table.width
我能找到的最好方法是:
if( jpanel!=null &&
jpanel.jtab!=null &&
jpanel.jtab.jtable!=null && ...
有没有更好的方法来执行此空检查?
我看到了这个问题:
C#中是否有一个等效于空合并运算符(??)的Java?
它没有列出解决方案,并且已经很旧了(Java 6-7时代)。我希望此功能在以后的版本中添加。
无法完全按照自己的意愿去做。但是,您可以将所有内容放入try语句中:
try {
myItem = bundle.category.subcategory.item;
}
catch(NullpointerException ignored) {}
请注意,这看起来很骇人,而且编码实践也很差。就清晰度而言,当前的解决方案可能是最好的方法。
编辑:我尝试过发布另一个Anwser,但该按钮显示为灰色,因此我将其放在此处:
当您应该使用for循环时,感觉就像多次重复相同的代码
您确实可以使用for
循环,但这会涉及反射和许多样板代码。想象这样的事情:
static boolean checkDeepNull(Object root, String... attributes) throws NoSuchFieldException, IllegalAccessException {
Object currentAttribute = root;
for(int attr = 0; currentAttribute != null && attr < attributes.length; attr++){
Field nextField = currentAttribute.getClass().getField(attributes[attr]);
Object nextAttribute = nextField.get(current);
if(nextAttribute == null) return false;
currentAttribute = nextAttribute;
}
return true;
}
如何使用它: if(checkDeepNull(bundle, "category", "subcategory", "item"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句