让枚举类型表示一组字符串的最佳方法是什么?

我试了一下:

enum Strings{
   STRING_ONE("ONE"), STRING_TWO("TWO")
}

然后我如何使用它们作为字符串?


当前回答

Enum的自定义字符串值

从http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html

java enum的默认字符串值是它的表面值或元素名称。但是,您可以通过重写toString()方法自定义字符串值。例如,

public enum MyType {
  ONE {
      public String toString() {
          return "this is one";
      }
  },

  TWO {
      public String toString() {
          return "this is two";
      }
  }
}

运行下面的测试代码将产生如下结果:

public class EnumTest {
  public static void main(String[] args) {
      System.out.println(MyType.ONE);
      System.out.println(MyType.TWO);
  }
}


this is one
this is two

其他回答

你可以将它用于string Enum

public enum EnumTest {
    NAME_ONE("Name 1"),
    NAME_TWO("Name 2");

    private final String name;

    /**
     * @param name
     */
    private EnumTest(final String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

并从main方法调用

public class Test {
    public static void main (String args[]){
        System.out.println(EnumTest.NAME_ONE.getName());
        System.out.println(EnumTest.NAME_TWO.getName());
    }
}

如果你不想使用构造函数,并且你想为这个方法取一个特殊的名字,试试这个方法:

public enum MyType {
  ONE {
      public String getDescription() {
          return "this is one";
      }
  },    
  TWO {
      public String getDescription() {
          return "this is two";
      }
  };

  public abstract String getDescription();
}

我怀疑这是最快的解决办法。没有必要使用变量final。

Enum的自定义字符串值

从http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html

java enum的默认字符串值是它的表面值或元素名称。但是,您可以通过重写toString()方法自定义字符串值。例如,

public enum MyType {
  ONE {
      public String toString() {
          return "this is one";
      }
  },

  TWO {
      public String toString() {
          return "this is two";
      }
  }
}

运行下面的测试代码将产生如下结果:

public class EnumTest {
  public static void main(String[] args) {
      System.out.println(MyType.ONE);
      System.out.println(MyType.TWO);
  }
}


this is one
this is two

根据你所说的“使用它们作为字符串”,你可能不想在这里使用enum。在大多数情况下,精英绅士提出的解决方案将允许你通过他们的tostring -方法使用它们,例如在System.out.println(STRING_ONE)或Strings = "Hello "+STRING_TWO,但当你真的需要字符串(例如STRING_ONE. tolowercase()),你可能更喜欢将它们定义为常量:

public interface Strings{
  public static final String STRING_ONE = "ONE";
  public static final String STRING_TWO = "TWO";      
}

要么将枚举名称设置为与你想要的字符串相同,或者更一般地,你可以将任意属性与你的枚举值关联:

enum Strings {
   STRING_ONE("ONE"), STRING_TWO("TWO");
   private final String stringValue;
   Strings(final String s) { stringValue = s; }
   public String toString() { return stringValue; }
   // further methods, attributes, etc.
}

常量在顶部,方法/属性在底部,这很重要。