Il modo migliore per creare enum di stringhe?

Qual è il modo migliore per avere un tipo enum rappresentare un insieme di stringhe?

Ho provato questo:

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

Come posso quindi usarli come Strings ?

Non so cosa vuoi fare, ma questo è il modo in cui ho tradotto il tuo codice di esempio ….

 /** * */ package test; /** * @author The Elite Gentleman * */ public enum Strings { STRING_ONE("ONE"), STRING_TWO("TWO") ; private final String text; /** * @param text */ Strings(final String text) { this.text = text; } /* (non-Javadoc) * @see java.lang.Enum#toString() */ @Override public String toString() { return text; } } 

In alternativa, puoi creare un metodo getter per il text .

Ora puoi fare Strings.STRING_ONE.toString();

Valori stringa personalizzati per Enum

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

Il valore di stringa predefinito per java enum è il suo valore nominale o il nome dell’elemento. Tuttavia, è ansible personalizzare il valore della stringa sovrascrivendo il metodo toString (). Per esempio,

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

L’esecuzione del seguente codice di prova produrrà questo:

 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 

Usa il suo metodo name() :

 public class Main { public static void main(String[] args) throws Exception { System.out.println(Strings.ONE.name()); } } enum Strings { ONE, TWO, THREE } 

cede ONE .

O imposta il nome dell’enum in modo che corrisponda alla stringa desiderata oppure, più in generale, puoi associare attributi arbitrari ai valori dell’enumerazione:

 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. } 

È importante avere le costanti nella parte superiore e i metodi / attributi nella parte inferiore.

A seconda di cosa intendi con “usali come archi”, potresti non voler usare un enum qui. Nella maggior parte dei casi, la soluzione proposta da The Elite Gentleman ti consentirà di utilizzarli attraverso i loro metodi toString, ad esempio in System.out.println(STRING_ONE) o String s = "Hello "+STRING_TWO , ma quando hai veramente bisogno di stringhe ( es. STRING_ONE.toLowerCase() ), potresti preferire definirli come costanti:

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

Se non vuoi usare i costruttori e vuoi avere un nome speciale per il metodo, prova questo:

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

Sospetto che questa sia la soluzione più rapida . Non è necessario utilizzare le variabili finali .

Puoi usarlo per la stringa 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; } 

}

E chiama dal metodo principale

test di class pubblica {

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

}