Возвращаем значение enum без вызова функции get - PullRequest
1 голос
/ 11 августа 2011

Возможно ли в Java вернуть значение enum без необходимости вызова функции для возврата значения, например getFlag() в моем примере? Если да, то как?

public enum MessageFlags {
        BIT0((short)1),
        BIT1((short)2),
        BIT2((short)4),
        BIT3((short)8),
        BIT4((short)16),
        BIT5((short)32),
        BIT6((short)64),
        BIT7((short)128),
        BIT8((short)256),
        BIT9((short)512),
        BIT10((short)1024),

        set_freq(BIT0),
        get_freq(BIT1);

        short bitFlag = 0;
        MessageFlags flag;

        MessageFlags(short flag) {
            this.bitFlag = flag;
        }

        MessageFlags(MessageFlags flag) {
            this.flag = flag;
        }

        public short getFlag() {
            return this.flag.bitFlag;
        }

        public short getValue() {
            return this.bitFlag;
        }
    }

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Просто скажите MessageFlags.BITX, и это вернет то же значение, что и getFlag()

2 голосов
/ 11 августа 2011

Можно import static MessageFlags.*; и сказать BITX.getFlag().

Вот полный пример:

A.java

package foo;

import static foo.B.*;

public class A{
    public B value = BAR;
}

B.java

package foo;

public enum B{
    BAR, BAZ, BOO
}
1 голос
/ 11 августа 2011

Я следовал совету @ Джереми об этом:

package foo;

import static foo.B.*;

, а затем я создал метод под названием set_freq в моем MessageFlags перечислении.Я сделал эту функцию static и вернул short.Например,

public static short set_freqflag() {
    return BIT0.getFlag();
}

Семантика set_freqflag немного странная, потому что вы ничего не устанавливаете, но у меня нет лучшего имени в данный момент.Это позволяет мне просто указать set_freqflag(), а не то, что я делал раньше.

0 голосов
/ 05 сентября 2017

Возможно, я действительно опаздываю, но я пишу всем, кто посещает эту тему, за помощью.

Если у вас есть enum, и вы хотите вернуть определенный параметр из его значений по умолчанию без вызова функции get, вам нужно вставить @Override над выбранной функцией, например:

public class Plants {
  public enum Fruits {
    APPLE ("sweet"),
    GRAPEFRUIT ("sour");

    private String taste;

    Fruits (String taste) {
      this.taste = taste;
    }

    @Override
    public String getTaste() {
      return this.taste;
    }
  }
}

И теперь вы можете вызывать любое значение enum без функции get:

Plants.Fruits.APPLE

И он вернется "сладким"

P.S. Я не профессиональный программист, пожалуйста, поправьте меня, если я случайно написал что-то противоестественное.

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