对子集合进行Groovy null和isEmpty检查

时间:2016-03-11 15:10:18

标签: groovy

我有以下用户类:

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:

  1. // Do something special非空(经过身份验证);和(
  2. 有一组user为空;或
  3. 有一组Roles是空的)
  4. 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果usernull,则user?.roles评估为null!user?.roles评估为!nulltrue },这与你的第一个条件相冲突。

如果user不是null,则user?.roles相当于user.roles,在这种情况下,所有条件都会得到满足。

结论:使用user && !user.roles。我同意评论,这更具可读性。