Предупреждение о неиспользуемом поле Java Enum

Что я здесь делаю неправильно?

public enum Type {
    INFO("INFO"),
    WARN("WARN"),
    ERROR("ERROR"),
    FATAL("FATAL");

    private String value;

    private Type(String aValue) {
        value = aValue;
    }
};  

введите здесь описание изображения

Я получаю предупреждение о том, что значение не используется...

все, о чем я могу думать, это использовать для этого @SupressWarnings, но я новичок в перечислении, поэтому я просто проверяю здесь, возможно, я сделал что-то не так... есть мысли?


person ycomp    schedule 09.08.2013    source источник
comment
IDE не лжет. Вы устанавливаете переменную, но никогда не используете ее и не предоставляете какой-либо способ ее извлечения.   -  person Paul Tomblin    schedule 09.08.2013
comment
Знайте, что Type.INFO.toString() даст "INFO", а Type.valueOf("WARN") даст Type.WARN. Таким образом, значение не требуется, как и toString() или getName().   -  person Joop Eggen    schedule 09.08.2013
comment
@Joop, да, я только что понял это ... спасибо.   -  person ycomp    schedule 09.08.2013


Ответы (5)


Он отображает предупреждение, потому что значение поля никогда не читается.

Чтобы просто пропустить это предупреждение, просто укажите геттер для поля.

public String getValue() {
    return value;
}
person Konstantin Yovkov    schedule 09.08.2013
comment
+1; но переменная по-прежнему не используется, пока метод нигде не используется :-) Поэтому может иметь смысл удалить переменную, поскольку она не принесет никакой пользы... - person home; 09.08.2013
comment
@home Пока это общедоступный геттер и есть какая-то фабрика или доступ к конструктору извне класса, компилятор не отметит его. - person nanofarad; 09.08.2013
comment
@hexafraction: конечно, но он до сих пор не используется ... компилятор просто не знает об этом факте - person home; 09.08.2013
comment
@home Не используется в проекте! = не используется другими классами вне класса, потенциально загружающими этот класс. - person nanofarad; 09.08.2013
comment
@hexafraction: хорошо, скажем, пока в геттере нет необходимости, переменная бесполезна. - person home; 09.08.2013

Я понимаю, почему это сбивает с толку, но назначение не считается использованным. На самом деле переменная должна использоваться в выражении до того, как это произойдет. В данном случае это означает, что либо value будет использоваться внутри класса для выполнения некоторых вычислений, либо вы напишете геттер. В любом случае переменная теперь "используется".

person devrobf    schedule 09.08.2013

Это означает, что вы пишете в него, но никогда не читаете из него. Тебе это надо ? Если нет, то вы можете удалить его.

person Brian Agnew    schedule 09.08.2013

Вы имеете в виду непрочитанные, неиспользованные? Виртуальная машина пытается сказать вам, что вы устанавливаете значение, но ничего с ним не делаете — обычно это ошибка. Определенно не используйте @SuppressWarnings. Либо исправьте ошибку (используйте значение), либо прекратите отслеживать переменную.

person Eric Stein    schedule 09.08.2013

IDE не жалуется, она просто пытается помочь вам remove неиспользуемым и ненужным code.

Если вы где-то используете value, он удаляет этот warning.

Поскольку вы объявили private String value; и не используете его, он информирует вас, чтобы вы предприняли необходимые шаги.

person Suresh Atta    schedule 09.08.2013