不像C或C++,如果Java中的任何一个对象(A,B)都为null ,o = objectA.objectB.objectC
则抛出一个NullPointerException
.在Java 1.7中,我无法执行任何像lambda表达式这样的命令来运行带try-catch
保护的命令.
那么,你将如何完美地缓存异常呢?
可悲的是,Java中没有任何"传播空"运算符,尽管之前有人谈过它.(符号o = objectA?.objectB?.objectC
被提出).
在您的情况下,您需要依次检查每个部分:
if (objectA == null){ o = null; } else { /*OType*/ p = objectA.objectB; o = p == null ? null : p.objectC; }
纯粹使用三元条件运算符也是一种可能性,但这意味着您需要objectA.objectB
在多个位置写入.
将表达式包含在try
catch
块周围对我来说似乎很粗糙,因为NullPointerExceptions
如果链包含函数,它可以扼杀合法(尽管这是直接字段访问的一个有争议的点).但它易于阅读,并且对于长链更好地扩展:
try { o = objectA.objectB.objectC; } catch (final java.lang.NullPointerException e){ o = null; }