我的方法不能识别Java枚举类型



目前正在开发用于单个赋值的代码气味检测器。我做了一个抽象的codesell类,有两个具体的子类- ClassLevelSmell和MethodLevelSmell。CodeSmell类有一个SmellType类型的受保护字段。构造函数示例如下:

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

SmellType是我定义的enum,看起来像这样:

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对象都有一个字段smell ,一个CodeSmells的数组列表。然而,当我试图将SmellType LONG_CLASS传递给ClassLevelMethod的构造函数时,我在eclipse中得到编译器警告,告诉我"LONG_CLASS不能解析为变量"。我是否在使用枚举类型时犯了一些错误?做什么?

要引用枚举值,您要么需要使用带有类名的限定表单,要么使用静态导入。所以要么改成:

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));

试试这个:

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

相关内容

  • 没有找到相关文章

最新更新