В настоящее время разрабатывается кодовый детектор запаха для универа.Я сделал абстрактный класс 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 не может быть преобразован в переменную».Я делаю какую-то ошибку с использованием перечислимых типов?Что делать?