создайте маску бита полномочий в Java

Я хочу сделать что-то вроде этого:

public enum Permissions
{
    CanBlah1,
    CanBlah2,
    CanBlah3
}

byte[] userPerm = Permissions.CanBlah1 | Permissions.CanBlah2;

// check permssions
//
if(userPerm && Permissions.CanBlah1 == Permissions.CanBlah1)
{
      // do something
}

Можно ли сделать это в Java как этот? (Я происхожу из c# среды),

17
задан mrblah 1 January 2010 в 02:31
поделиться

3 ответа

Это можно легко сделать, используя EnumSet

import java.util.EnumSet;

import static java.util.EnumSet.of;
import static java.util.EnumSet.range;
import static so.User.Permissions.CanBlah1;
import static so.User.Permissions.CanBlah2;
import static so.User.Permissions.CanBlah3;

public class User {
    public enum Permissions {
        CanBlah1,
        CanBlah2,
        CanBlah3
    }

    public static void main(String[] args) throws Exception {
        EnumSet<Permissions> userPerms = of(CanBlah1, CanBlah2);
        System.out.println(userPerms.contains(CanBlah1)); //true
        System.out.println(userPerms.contains(CanBlah2)); //true
        System.out.println(userPerms.contains(CanBlah3)); //false
        System.out.println(userPerms.containsAll(of(CanBlah1, CanBlah3))); //false
        System.out.println(userPerms.containsAll(range(CanBlah1, CanBlah2))); //true
        System.out.println(userPerms.containsAll(range(CanBlah1, CanBlah3))); //false
    }

}
38
ответ дан 30 November 2019 в 10:43
поделиться

Хоть я и не рекомендую, но вы можете запросить порядковый номер() перечисления и использовать его для битовых операций. Конечно, так как вы не можете определить, что такое порядковый номер перечисления, вы должны вставить фальшивые значения, чтобы получить правильные порядковые номера

enum Example {
   Bogus,            --> 0
   This,             --> 1
   That,             --> 2
   ThisOrThat        --> 3
};

Заметьте, что необходимо ввести фальшивое перечисление, чтобы

ThisOrThat.ordinal() == This.ordinal() | That.ordinal()
3
ответ дан 30 November 2019 в 10:43
поделиться

Насколько я знаю, для типов перечисления

битовый оператор не определен.
0
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: