如何在Java中使用Enum

时间:2017-01-13 10:38:13

标签: java enums grouping

我想知道如何在java中使用枚举的正确方法。 我已经实现了以下代码,它给出了一个错误。

public class GlobalVariables {

public enum Algorithm{louvain, kmeans};

public enum Evolution{survive,merge,split,dissolve};

/**
 * GED alpha threshold
 */
public static float GED_INCLUSION_ALPHA = 0.5f;

/**
 * GED beta threshold
 */
public static float GED_INCLUSION_BETA = 0.7f;}

你知道我可能做错了什么吗?

错误: 此行有多个标记

  
      
  • louvain无法解析为
  •   
  • 'enum'不应该用作标识符,因为它是来自源的保留关键字    
  • 等级1.5   
  • 语法错误,插入“;”完成BlockStatements
  •   
  • 语法错误,插入“;”完成ClassBodyDeclarations
  •   
  • 枚举无法解析为类型
  •   
  • 枚举无法解析为类型
  •   
  • 'enum'不应该用作标识符,因为它是来自源的保留关键字    
  • 等级1.5   
  • 令牌“,”上的语法错误,删除此令牌
  •   

3 个答案:

答案 0 :(得分:5)

此错误:

  

'枚举'不应该用作标识符,因为它是源级别1.5上的保留关键字

似乎暗示您正在使用源版本进行编译< 1.5。并且在Java 1.5中引入了枚举。

检查编译器或IDE设置。

或者,某些代码中可能存在语法错误,但您未在问题中显示。

答案 1 :(得分:1)

我已检查过您在此处发布的代码。它与编译器java 1.5及更高版本一起工作正常。 永远记住enum是在java 5中引入的,所以如果您使用的话,请检查IDE中的编译器设置,或者您可以从终端检查编译器版本。

java -version

您可以查看有关枚举的更多信息;如何在java中使用enum以及Walking Techie

中有关它的更多详细信息

答案 2 :(得分:-1)

我会看到你的枚举与开关一起使用; 基于算法(类型),我们为Algorithm接口选择一个特定的实现,它包含一个方法:executeAlgorithm,我们可以在线下进一步调用。

以下代码正在编译并在Java 1.6及更高版本中工作(请检查您的java版本导致枚举在1.5中添加)

public class GlobalVariables {


    interface Algorithm {
        void executeAlgorithm();
    }

    public enum AlgorithmType {louvain, kmeans}

    public enum Evolution {survive, merge, split, dissolve}

    /**
     * GED alpha threshold
     */
    public static float GED_INCLUSION_ALPHA = 0.5f;

    /**
     * GED beta threshold
     */
    public static float GED_INCLUSION_BETA = 0.7f;


    public static void main(String[] args) {
        AlgorithmType algorithmType = AlgorithmType.louvain; //initialize it from somewhere

        Algorithm algorithm = null;
        switch (algorithmType) {
            case louvain: {
                algorithm = new LouvainAlgorithmImplementation();
                break;
            }
            case kmeans: {
                algorithm = new KMeansAlgorithmImplementation();
                break;
            }
            default: {
                // do something for default;
                algorithm = new DefaultAlgorithmImplementation();
            }
        }
        algorithm.executeAlgorithm();
    }

    static class LouvainAlgorithmImplementation implements Algorithm {
        @Override
        public void executeAlgorithm() {
            System.out.println("Louvain was called");
        }
    }

    static class KMeansAlgorithmImplementation implements Algorithm {
        @Override
        public void executeAlgorithm() {
            System.out.println("KMeans was called");

        }
    }

    static class DefaultAlgorithmImplementation implements Algorithm {
        @Override
        public void executeAlgorithm() {
            System.out.println("Default was called");
        }
    }

}