"items": [
{
"kind": "plus#person",
"etag": "\"xoxof0VSFbg0RVYwDJMmg4Jxcp4/PNuMC_dEeZTZ-kScKTd8paGuyXg\"",
"objectType": "person",
"id": "106189723444098348646",
"displayName": "Larry Page",
"url": "https://plus.google.com/+LarryPage",
"image": {
"url": "https://lh3.googleusercontent.com/-Y86IN-vEObo/AAAAAAAAAAI/AAAAAAADO1I/QzjOGHq5kNQ/photo.jpg?sz=50"
}
},
{
"kind": "plus#person",
"etag": "\"xoxof0VSFbg0RVYwDJMmg4Jxcp4/zMTOKX19L3IKS43Bv3m6xV0dLNM\"",
"objectType": "person",
"id": "111176035772651881663",
"displayName": "Larry Page",
"url": "https://plus.google.com/111176035772651881663",
"image": {
"url": "https://lh4.googleusercontent.com/-AFDqJCHiTuA/AAAAAAAAAAI/AAAAAAAAAEE/oMOpCoPpfy0/photo.jpg?sz=50"
}
},
{
"kind": "plus#person",
"etag": "\"xoxof0VSFbg0RVYwDJMmg4Jxcp4/soC0nCQRAJ8gFoxvRJnf4iwMSB0\"",
"objectType": "person",
"id": "101600523208878203536",
"displayName": "Larry Page",
"url": "https://plus.google.com/101600523208878203536",
"image": {
"url": "https://lh4.googleusercontent.com/-UHYp8q4snW0/AAAAAAAAAAI/AAAAAAAACWs/BRe354a0WfU/photo.jpg?sz=50"
}
}
]
比较此字符串变量,如下所示。
String str = "abc";
如果if(str.equals("abc")) {}
为str
,则会导致null
被抛出。
为避免这种情况,可以强制执行额外的空检查。如,
java.lang.NullPointerException
我发现它很丑陋。更好的可以改写如下。
if(str != null && str.equals("abc")) {}
即使if("abc".equals(str)) {}
为java.lang.NullPointerException
,也不会抛出str
。此外,对象等于null
永远不会成真。
然而,当条件表达式被反转时,不能使用最后一种情况,
null
如果if(!"abc".equals(str)) {
System.out.println(str.length());
}
为java.lang.NullPointerException
,这会导致if
阻止内的str
。
如果不重写条件语句,可以以某种方式避免这种情况吗?
null
这很简单,难以辨认。
虽然该示例使用if(str != null && !"abc".equals(str)) {}
对象,但它可能是一个更复杂的对象。
答案 0 :(得分:4)
另一种方法是使用Java 8可选包装器
Optional<Customer> optional = findCustomer();
if (optional.isPresent()) {
Customer customer = maybeCustomer.get();
... use customer ...
}
else {
... deal with absence case ...
}
答案 1 :(得分:1)
如果您想使用null
,则必须在某个时候检查str
。没有办法绕过它。你可以把这个检查包装成一个额外的效用函数或类似的东西,但最后你不会得到额外的检查。
如果您是使用大量其他库的朋友,则可以使用org.apache.commons.lang.StringUtils#length(java.lang.String)
。这就是你想要的,也许你有一个类似你的应用程序中存在的库。 apache只是一个例子。肯定有其他人做类似的事情。
如果您想要同时删除null
支票,可能更好的问题是:为什么str
可以null
,并且有可能阻止它null
从一开始就不接受这个价值。
答案 2 :(得分:1)
避免空值的另一种可能方法是使用assert
:在另一个类似问题中查看此答案:
How to check to see that a set of variables is not null before continuing
答案 3 :(得分:1)
长话短说:据我所知,根本没有图书馆方法这样做。这个if(str != null && !"abc".equals(str)) {}
实际上要求要比较的对象都不是null
而不是彼此相等。
执行此任务的静态实用程序方法足以处理。
/**
* Returns {@code true} if and only if both the arguments (objects) are
* <b>not</b> {@code null} and are not equal to each other and {@code false}
* otherwise.
*
* @param a an object.
* @param b an object to be compared with {@code a} for equality.
* @return {@code true} if both the arguments (objects) are <b>not</b> {@code null}
* and not equal to each other.
*/
public static boolean notEquals(Object a, Object b) {
return (a == b || a == null || b == null) ? false : !a.equals(b);
}