Groovy null 和 isEmpty 检查子集合
Posted
技术标签:
【中文标题】Groovy null 和 isEmpty 检查子集合【英文标题】:Groovy null and isEmpty checks on child collections 【发布时间】:2016-06-26 21:34:50 【问题描述】:我有以下用户类:
class User
String username
Set<Role> roles
在应用程序中,我调用SecurityUtils.getUser()
来获取当前登录的用户。如果用户已登录,则此方法返回有效的 User
实例,如果用户未验证/匿名,则返回 null
:
User user = SecurityUtils.getUser()
我正在尝试编写一个方法,我需要确定用户是否登录,如果他们登录了,如果他们的Roles
集为空或null
,我需要做一些特殊的事情:
if(user && !user.roles)
// Do something special
我想做这个 Groovier,所以我尝试了:
if(!user?.roles)
// Do something special
这是行不通的。同样,// Do something special
应该仅在以下情况下执行:
user
不为空(已验证);和 (
有一组为空的Roles
;或
有一组Roles
是空的)
有什么想法吗?
【问题讨论】:
是什么让你相信user && !user.roles
不时髦?
这样使用。无论你想出什么“聪明”的东西,都比user && !user.roles
可读性差。让我们假设!user?.roles
有效。一般开发人员需要多长时间才能理解这种情况的意图?
大声笑——这一定是历史上第一次 Groovy 人推荐使用更重的语法!
@smeeb Groovy 的目的不是让每个句子都尽可能小。
【参考方案1】:
如果user
为null
,则user?.roles
的计算结果为null
,!user?.roles
的计算结果为!null
,即true
,因此这与您的第一个条件相冲突。
如果user
不是null
,则user?.roles
等价于user.roles
,在这种情况下所有条件都满足。
结论:使用user && !user.roles
。我同意 cmets,这更具可读性。
【讨论】:
以上是关于Groovy null 和 isEmpty 检查子集合的主要内容,如果未能解决你的问题,请参考以下文章
如何检查列数据 Spark scala 上的 isEmpty