Java枚举会混淆创建位掩码和检查权限

问题描述 投票:8回答:1

我想将此c#权限模块移植到Java,但是当我无法将数值保存到数据库中然后将其转换为枚举表示形式时,我感到困惑。

在c#中,我创建了这样的枚举:

public enum ArticlePermission
{
     CanRead   = 1,
     CanWrite  = 2,
     CanDelete = 4,
     CanMove   = 16
}

然后我可以创建如下权限集:

ArticlePermission johnsArticlePermission = ArticlePermission.CanRead | ArticlePermission.CanMove;

然后我将其保存到数据库中,使用:

(int)johnsArticlePermission

现在我可以从数据库中将其读取为整数/长整数,并将其转换为:

johnsArticlePermission = (ArticlePermission) dr["articlePermissions"];

而且我可以检查权限,例如:

if(johnsArticlePermission & ArticlePermission.CanRead == ArticlePermission.CanRead) 
{

}

如何在Java中执行此操作?据我了解,在Java中,您可以将枚举转换为数值,然后将其转换回Java枚举。

想法?

我想将此c#权限模块移植到Java,但是当我无法在数据库中保存数值然后将其转换为枚举表示形式时,我感到困惑。在c#中,我...

java permissions bit-manipulation
1个回答
9
投票

您真正需要的是EnumSet,在API中这样描述:

© www.soinside.com 2019 - 2024. All rights reserved.