enum bitmasks
От: dilmah США  
Дата: 09.04.13 00:53
Оценка:
изучаю джаву.
Как в ней принято использовать битмаски?

ну то есть если я в C написал бы
enum E {
    LEFT = 1,
    HIGH = 2,
    EVIL = 4
};

E e = (E)(HIGH | EVIL);


какие аналоги есть в java. EnumSet это то?
Re: enum bitmasks
От: Аноним  
Дата: 09.04.13 05:33
Оценка:
Здравствуйте, dilmah, Вы писали:

D>ну то есть если я в C написал бы

D>
D>enum E {
D>    LEFT = 1,
D>    HIGH = 2,
D>    EVIL = 4
D>};

D>E e = (E)(HIGH | EVIL);
D>


Даже интересно, и что бы вы получили в С ? Значение для 6 у вас неопределено
Re[2]: enum bitmasks
От: dilmah США  
Дата: 09.04.13 05:36
Оценка:
А>Даже интересно, и что бы вы получили в С ? Значение для 6 у вас неопределено

это стандартное (предусмотренное стандартом) использование энумов в С. Ты получаешь битмаск, и переменная типа E гарантированно сможет его сохранить
Re: enum bitmasks
От: avpavlov  
Дата: 09.04.13 06:37
Оценка:
D>изучаю джаву.
D>Как в ней принято использовать битмаски?

В Яве мало где используются маски, обычно в коде который писали на заре Явы и принесли этот подход из C++

D>какие аналоги есть в java. EnumSet это то?


Если задасться целью, то наверное можно и его

Самый Явский подход будет на каждый флаг завести своё свойство.

bean.setLeft(true)
bean.setHigh(true)
bean.setEvil(true)

Этот подход хорошо совместим со Spring'ом, да и вообще с dependecy injection, позволяет иметь простой доступ из скриптовых вставок (#{bean.left}) из JSP, JSF и т.д.
Re[3]: enum bitmasks
От: avpavlov  
Дата: 09.04.13 06:38
Оценка:
Здравствуйте, dilmah, Вы писали:


А>>Даже интересно, и что бы вы получили в С ? Значение для 6 у вас неопределено


D>это стандартное (предусмотренное стандартом) использование энумов в С. Ты получаешь битмаск, и переменная типа E гарантированно сможет его сохранить


Ну получается никакой разницы с int что ли? Инты можно и на Яве.
Re: enum bitmasks
От: Chuprin  
Дата: 09.04.13 09:51
Оценка: 8 (1) +1
Здравствуйте, dilmah, Вы писали:

D>изучаю джаву.

D>Как в ней принято использовать битмаски?

D>ну то есть если я в C написал бы

D>
D>enum E {
D>    LEFT = 1,
D>    HIGH = 2,
D>    EVIL = 4
D>};

D>E e = (E)(HIGH | EVIL);
D>


D>какие аналоги есть в java. EnumSet это то?


EnumSet это то, что вам надо, как я понимаю.
http://stackoverflow.com/questions/1987738/create-a-permission-bit-mask-in-java
http://dhruba.name/2008/12/31/effective-java-item-32-use-enumset-instead-of-bit-fields/
Re[2]: enum bitmasks
От: stenkil  
Дата: 09.04.13 10:44
Оценка:
Здравствуйте, Chuprin, Вы писали:

Может я вопрос неправильно понял ? Автор не пытается определить имеет ли что — то состояние LEFT, HIGH, EVIL, он хочет получить новое состояние HIGH | EVIL, которое в его enum не определено
например
enum State {ONE(1), TWO(2), THREE(3)
  final int state;
  private State(int state) {
    this.state = state;
  }
}

THREE.state == ONE.state | TWO.state;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.