As @aperkins said, you should use enums.
The enum base class, Enum, provides a valueOf method that will convert a string to an instance.
enum MyEnum { A, B, C; } // Here's your toText String strVal = MyEnum.A.getName(); // and here's your fromText MyEnum value = MyEnum.valueOf(MyEnum.class, strVal); Update: For the ones that are enums, this might do what you need. It uses reflection, so you only need to implement EnumHelper on enums where you have to deal with legacy values.
/** Enums can implement this to provide a method for resolving a string * to a proper enum name. */ public interface EnumHelp { // Resolve s to a proper enum name that can be processed by Enum.valueOf String resolve(String s); } /** EnumParser provides methods for resolving symbolic names to enum instances. * If the enum in question implements EnumHelp, then the resolve method is * called to resolve the token to a proper enum name before calling valueOf. */ public class EnumParser { public static <T extends Enum<T>> T fromText(Class<T> cl, String s) { if (EnumHelp.class.isAssignableFrom(cl)) { try { Method resolve = cl.getMethod("resolve", String.class); s = (String) resolve.invoke(null, s); } catch (NoSuchMethodException ex) {} catch (SecurityException ex) {} catch(IllegalAccessException ex) {} catch(IllegalArgumentException ex) {} catch(InvocationTargetException ex) {} } return T.valueOf(cl, s); } public <T extends Enum<T>> String toText(T value) { return value.name(); } }