不像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;
}
Run Code Online (Sandbox Code Playgroud)
纯粹使用三元条件运算符也是一种可能性,但这意味着您需要objectA.objectB在多个位置写入.
将表达式包含在try catch块周围对我来说似乎很粗糙,因为NullPointerExceptions如果链包含函数,它可以扼杀合法(尽管这是直接字段访问的一个有争议的点).但它易于阅读,并且对于长链更好地扩展:
try {
o = objectA.objectB.objectC;
} catch (final java.lang.NullPointerException e){
o = null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |