我有以下用户类:
class User {
String username
Set<Role> roles
}
在应用程序中,我调用SecurityUtils.getUser()
来获取当前登录用户。如果用户已登录,此方法将返回有效的User
实例,如果未经身份验证/匿名,则返回null
:
User user = SecurityUtils.getUser()
我正在尝试编写一个方法,我需要确定用户是否已登录,如果是,我需要做一些特别的事情,如果他们的Roles
集合为空或{{ 1}}:
null
我想制作这个Groovier,所以我尝试了:
if(user && !user.roles) {
// Do something special
}
这不起作用。同样,if(!user?.roles) {
// Do something special
}
只应 执行if:
// Do something special
非空(经过身份验证);和(user
为空;或Roles
是空的)有什么想法吗?
答案 0 :(得分:1)
如果user
为null
,则user?.roles
评估为null
,!user?.roles
评估为!null
,true
},这与你的第一个条件相冲突。
如果user
不是null
,则user?.roles
相当于user.roles
,在这种情况下,所有条件都会得到满足。
结论:使用user && !user.roles
。我同意评论,这更具可读性。