我们知道在Java中使用null
的对象引用时,通常会出现NullPointerException
。 当我们的代码尝试在不存在实例的情况下尝试访问对象的方法或字段或数组的元素时发生这种情况,例如,它引用null
。
class Animal {
String name
Animal parent
}
def animal = new Animal(name: "Bella") // no parent
我们可能会从外部获得Animal
实例,我们需要获取父实例的名称。
def parentName = animal.parent.name
// BLAM! java.lang.NullPointerException:
// Cannot get property 'name' on null object
父级为null
。 通常作为预防措施,我们必须事先检查null
。
if (animal.parent != null) {
def parentName = animal.parent.name
}
您会看到,如果我们需要祖父母的名字,则还有更多引用,它们可能为null。
def grandParentName = animal.parent.parent.name
我们需要一种安全的方法来浏览可能期望为null
引用。 幸运的是,使用Groovy,这非常容易。 使用可以防止NullPointerExceptions的安全导航 (或null-safe )运算符。 这只是点(。)之前的问号(?)
动物名
一个小的宝石,但是Groovy的一大特色。
// instead of checking for nulls the Java way
if (animal.parent != null && animal.parent.parent != null) {
def grandParentName = animal.parent.parent.name
}
// or using the Groovy truth
if (animal.parent && animal.parent.parent) {
def grandParentName = animal.parent.parent.name
}
// use safe navigation
def grandParentName = animal.parent?.parent?.name
// and in combination with Elvis
grandParentName = animal.parent?.parent?.name ?: "Unknown"
翻译自: https://www.javacodegeeks.com/2015/09/avoid-nullpointerexception-safe-navigation-with-groovy.html