【发布时间】:2019-03-10 22:06:16
【问题描述】:
我有一个角色对象,其中有一组角色名称,我想检查用户是否具有特定角色。告诉我如何做到既美观又简洁。
角色.java
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
@NaturalId
@Column(length = 60)
private RoleName name;
角色名.java:
public enum RoleName {
ROLE_ADMIN,
ROLE_MANAGER,
ROLE_CLIENT,
ROLE_USER,
}
现在我的搜索看起来像这样:
boolean isFind = false;
for (Role role : user.getRoles()) {
isFind = role.getName().equals(RoleName.ROLE_CLIENT);
if (isFind) break;
}
但我不是很喜欢这种方式。你能推荐一个更好的选择吗?
【问题讨论】:
-
备案:您可以使用 == 比较枚举。
-
user.getRoles()返回的是什么类型?如果您可以将其设为Set(理想情况下为EnumSet),那么您的整个代码将折叠为user.getRoles().contains(RoleName.ROLE_CLIENT)。 -
所有集合都有
contains(),因为它来自接口Collection<E> -
如何使用
contains()?它将在Role的集合中搜索类型RoleName。这样做的唯一方法是覆盖Role类中的equals方法 -
真
contains(),将测试Role是否包含相同的Role对象而不是RoleName,正如@Maxim所说的
标签: java search collections set