Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public enum Car
- {
- NANO ("Very Cheap", "India"),
- MERCEDES ("Expensive", "Germany"),
- FERRARI ("Very Expensive", "Italy");
- public final String cost;
- public final String madeIn;
- Car(String cost, String madeIn)
- {
- this.cost= cost;
- this.madeIn= madeIn;
- }
- }
- public enum Car
- {
- NANO,
- MERCEDES,
- FERRARI;
- public final String cost;
- public final String madeIn;
- Car()
- {
- this.cost = BUNDLE.getString("Car." + name() + ".cost");
- this.madeIn = BUNDLE.getString("Car." + name() + ".madeIn");
- }
- private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(...);
- }
- Car.NANO.cost=Very cheap
- Car.NANO.madeIn=India
- Car.MERCEDES.cost=Expensive
- ...
- <bean id="car" class="Foo">
- <property name="carString" value="NANO" />
- </bean>
- public void setCar(String carString) {
- this.carString = Car.valueOf(carString);
- }
- Constructor con = MyEnum.class.getDeclaredConstructors()[0];
- Method[] methods = con.getClass().getDeclaredMethods();
- for (Method m : methods) {
- if (m.getName().equals("acquireConstructorAccessor")) {
- m.setAccessible(true);
- m.invoke(con, new Object[0]);
- }
- }
- Field[] fields = con.getClass().getDeclaredFields();
- Object ca = null;
- for (Field f : fields) {
- if (f.getName().equals("constructorAccessor")) {
- f.setAccessible(true);
- ca = f.get(con);
- }
- }
- Method m = ca.getClass().getMethod(
- "newInstance", new Class[] { Object[].class });
- m.setAccessible(true);
- MyEnum v = (MyEnum) m.invoke(ca, new Object[] {
- new Object[] { "MY_NEW_ENUM_VALUE", Integer.MAX_VALUE } });
- System.out.println(v.getClass() + ":" + v.name() + ":" + v.ordinal());
- public enum Car {
- NANO(CarEnumerationInitializer.getNANO()), MERCEDES(
- CarEnumerationInitializer.getMERCEDES()), FERRARI(
- CarEnumerationInitializer.getFERRARI());
- public final String cost;
- public final String madeIn;
- Car(ICarProperties properties) {
- this.cost = properties.getCost();
- this.madeIn = properties.getMadeIn();
- }
- }
- //Car's properties placeholder interface ...
- public interface ICarProperties {
- public String getMadeIn();
- public String getCost();
- }
- //... and its implementation
- public class CarProperties implements ICarProperties {
- public final String cost;
- public final String madeIn;
- public CarProperties(String cost, String madeIn) {
- this.cost = cost;
- this.madeIn = madeIn;
- }
- @Override
- public String getCost() {
- return this.cost;
- }
- @Override
- public String getMadeIn() {
- return this.madeIn;
- }
- }
- //Singleton that will be provide Car's properties, that will be defined at applicationContext loading.
- public final class CarEnumerationInitializer {
- private static CarEnumerationInitializer INSTANCE;
- private static ICarProperties NANO;
- private static ICarProperties MERCEDES;
- private static ICarProperties FERRARI;
- private CarEnumerationInitializer(ICarProperties nano,
- ICarProperties mercedes, ICarProperties ferrari) {
- CarEnumerationInitializer.NANO = nano;
- CarEnumerationInitializer.MERCEDES = mercedes;
- CarEnumerationInitializer.FERRARI = ferrari;
- }
- public static void forbidInvocationOnUnsetInitializer() {
- if (CarEnumerationInitializer.INSTANCE == null) {
- throw new IllegalStateException(CarEnumerationInitializer.class
- .getName()
- + " unset.");
- }
- }
- public static CarEnumerationInitializer build(CarProperties nano,
- CarProperties mercedes, CarProperties ferrari) {
- if (CarEnumerationInitializer.INSTANCE == null) {
- CarEnumerationInitializer.INSTANCE = new CarEnumerationInitializer(
- nano, mercedes, ferrari);
- }
- return CarEnumerationInitializer.INSTANCE;
- }
- public static ICarProperties getNANO() {
- forbidInvocationOnUnsetInitializer();
- return NANO;
- }
- public static ICarProperties getMERCEDES() {
- forbidInvocationOnUnsetInitializer();
- return MERCEDES;
- }
- public static ICarProperties getFERRARI() {
- forbidInvocationOnUnsetInitializer();
- return FERRARI;
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans>
- <bean id="nano" class="be.vinkolat.poc.core.car.CarProperties">
- <constructor-arg type="java.lang.String" value="Cheap"></constructor-arg>
- <constructor-arg type="java.lang.String" value="India"></constructor-arg>
- </bean>
- <bean id="mercedes"
- class="be.vinkolat.poc.core.car.CarProperties">
- <constructor-arg type="java.lang.String" value="Expensive"></constructor-arg>
- <constructor-arg type="java.lang.String" value="Germany"></constructor-arg>
- </bean>
- <bean id="ferrari" class="be.vinkolat.poc.core.car.CarProperties">
- <constructor-arg type="java.lang.String"
- value="Very Expensive">
- </constructor-arg>
- <constructor-arg type="java.lang.String" value="Italy"></constructor-arg>
- </bean>
- <bean id="carInitializer"
- class="be.vinkolat.poc.core.car.CarEnumerationInitializer"
- factory-method="build" lazy-init="false">
- <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
- ref="nano" />
- <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
- ref="mercedes" />
- <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
- ref="ferrari" />
- </bean>
- </beans>
Add Comment
Please, Sign In to add comment