避免NullPointerException:使用Groovy进行安全导航

我们知道在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值