我希望将权限存储在一个位集中,以便在Java中有效地比较它们。 1表示授予许可,0表示拒绝。如果执行授权,则会将所需权限与权限集进行比较。
我的想法是使用AND并将结果与请求的权限进行比较。
示例:
0010 1101 Granted Permissions
AND 0000 0101 Requested Permissions
= 0000 0101 Result
if (Result == Requested Permissions)
allow
else
deny
这可以更高效或更简单吗?
答案 0 :(得分:5)
我将专注于“简单”部分,因为我认为此操作不会成为任何严肃应用程序中的性能瓶颈。
您可以使用具有所有必要操作的BitSet
。
更加面向对象的方法,更易于理解和阅读,是使用enum
表示您的权限并使用EnumSet
。对于只有少量值的枚举,它将与BitSet
一样高效,因为它将使用非常类似的实现。
答案 1 :(得分:2)
如果您使用的是Java 5或更高版本,我建议您使用Enum
和EnumSet
。它更容易处理,AFAIK表现同样出色。
答案 2 :(得分:1)
您的方法非常好,并且可以按预期工作。当然,你可以用几种更复杂的方式做到这一点,但是如果上下文适合你的情况,我认为使用位操作运算符并没有错。所有这些运算符都是Java核心语言的一部分,并且未标记为 @deprecated 或 @evil 。