Предупреждение за неизползвано поле на Java Enum

Какво правя грешно тук?

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

    private String value;

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

въведете описание на изображението тук

Получавам предупреждение за неизползвана стойност...

всичко, за което мога да мисля, е да използвам @SupressWarnings за него, но съм нов в enum, така че просто проверявам тук дали може би съм направил нещо нередно... някакви мисли?


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

Имате предвид непрочетени, а не неизползвани? VM се опитва да ви каже, че задавате стойност, но не правите нищо с нея - обикновено грешка. Определено не използвайте @SuppressWarnings. Или коригирайте грешката (използвайте стойността), или спрете проследяването на променливата.

person Eric Stein    schedule 09.08.2013

IDE не се оплаква, а просто се опитва да ви помогне да remove неизползвани и ненужни code.

Ако използвате value някъде, това премахва warning.

Тъй като сте декларирали private String value; и не го използвате, той ви информира, така че да предприемете необходимите стъпки.

person Suresh Atta    schedule 09.08.2013