Типы Java Enum не распознаются моими методами - PullRequest
2 голосов
/ 20 апреля 2011

В настоящее время разрабатывается кодовый детектор запаха для универа.Я сделал абстрактный класс CodeSmell с двумя конкретными подклассами - ClassLevelSmell и MethodLevelSmell.Класс CodeSmell имеет защищенное поле типа SmellType.Пример конструктора выглядит следующим образом:

public ClassLevelSmell(ClassDefinition classDef, SmellType type){
    smellyClass = classDef;
    this.smell = type;
}

SmellType - это определенное мной перечисление, которое выглядит следующим образом:

public enum SmellType {
LONG_CLASS, LONG_METHOD, PRIMITIVE_OBSESSION, LONG_PARAM_LIST}

Затем у меня есть объект SmellDetector со многими методами, которые сравниваютстатистика анализируемых классов и методов (таких как количество строк, количество примитивных объявлений и т. д.) и создание нового объекта CodeSmell, если обнаружен запах.Поэтому мой код для этого выглядит следующим образом:

    private void detectLongClass(ClassDefinition classDef) {
    if(classDef.getNumLines() > 250){
        smells.add(new ClassLevelSmell(classDef, LONG_CLASS));
    }
}

Каждый объект SmellDetector имеет поле запахов , ArrayList of CodeSmells.Тем не менее, я получаю предупреждение компилятора в eclipse, когда я пытаюсь передать SmellType LONG_CLASS в конструктор для ClassLevelMethod, говоря мне: «LONG_CLASS не может быть преобразован в переменную».Я делаю какую-то ошибку с использованием перечислимых типов?Что делать?

Ответы [ 2 ]

8 голосов
/ 20 апреля 2011

Для ссылки на значения перечисления вам нужно либо использовать квалифицированную форму с именем класса, либо использовать статический импорт. Так что либо сделай это:

smells.add(new ClassLevelSmell(classDef, SmellType.LONG_CLASS));

или сделайте это:

// at the top of your file:
import static packagename.SmellType.*;

smells.add(new ClassLevelSmell(classDef, LONG_CLASS));
4 голосов
/ 20 апреля 2011

Попробуйте это:

smells.add(new ClassLevelSmell(classDef, SmellType.LONG_CLASS));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...