Java Beginner: механизм, стоящий за "|"оператор в оболочке s = новая оболочка (d, SWT.CLOSE | SWT.RESIZE); - PullRequest
0 голосов
/ 09 апреля 2011

привет, мне было интересно узнать о механизме оператора "|" в следующем коде.

Display d = new Display( );
Shell s = new Shell(d, SWT.CLOSE | SWT.RESIZE);

пс: я уже проверил исходный код, но не понял

Ответы [ 4 ]

3 голосов
/ 09 апреля 2011

SWT.CLOSE и SWT.RESIZE являются int-флагами. | означает Binary OR между ними, что означает пропускать их обоих.

Например. если RESIZE = 1 (00000001 binary) и CLOSE = 2 (00000010 binary), SWT.CLOSE | SWT.RESIZE = 3 (00000011 binary) и позже вызванный метод будет знать, как перехватить их обоих.

Редактировать - что дальше

Если конструктор ведет себя в соответствии с флагами, он может выглядеть следующим образом:

public Shell(Display d, int flags)
{
      if ((flags & SWT.CLOSE) > 0)//the close flag is on
      { /*do some stuff*/ };
      if ((flags & SWT.RESIZE) > 0)
      { /*do some stuff to enable resize..*/ };
}

Теперь, вместо того, чтобы передавать много ненужных аргументов конструктору, мы сообщаем ему с одним аргументом (флажками), что нужно сделать. Например, первый if проверяет, установлен ли флаг ЗАКРЫТЬ во флаги: flags = 3 (00000011 binary) (как мы его установили ранее) SWT.CLOSE = 2 (00000010 binary) и flags & SWT.CLOSE = 3 & 2 = 00000010 binary, который больше нуля и установлен.

1 голос
/ 09 апреля 2011

Это побитовый оператор ИЛИ.

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

Пример:

  • Выделите передний план: 001=> 1 (HIGHLIGHT_FG)
  • Выделение фона: 010 => 2 (HIGHLIGHT_BG)
  • Жирный шрифт: 100 => 4 (BOLD)

Таким образом, постоянные BOLD | HIGHLIGHT_FG будут 5.

Но это также можно определить как HIGHLIGHT_ALL с 011 => 3.

0 голосов
/ 09 апреля 2011

В чем именно ваш вопрос?

Оператор канала является побитовой операцией ИЛИ.

Обычно при программировании он позволяет вам ИЛИ два бита значений вместе.Например,

0001b |0010b дает 0011.

0 голосов
/ 09 апреля 2011

Это побитовый или оператор. В этом случае он используется для битового поля, т. Е. SWT.CLOSE | SWT.RESIZE устанавливает два бита в целочисленной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...