Guest User

Untitled

a guest
Jun 24th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. public enum Car
  2. {
  3. NANO ("Very Cheap", "India"),
  4. MERCEDES ("Expensive", "Germany"),
  5. FERRARI ("Very Expensive", "Italy");
  6.  
  7. public final String cost;
  8. public final String madeIn;
  9.  
  10. Car(String cost, String madeIn)
  11. {
  12. this.cost= cost;
  13. this.madeIn= madeIn;
  14. }
  15.  
  16. }
  17.  
  18. public enum Car
  19. {
  20. NANO,
  21. MERCEDES,
  22. FERRARI;
  23.  
  24. public final String cost;
  25. public final String madeIn;
  26.  
  27. Car()
  28. {
  29. this.cost = BUNDLE.getString("Car." + name() + ".cost");
  30. this.madeIn = BUNDLE.getString("Car." + name() + ".madeIn");
  31. }
  32.  
  33. private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(...);
  34.  
  35. }
  36.  
  37. Car.NANO.cost=Very cheap
  38. Car.NANO.madeIn=India
  39. Car.MERCEDES.cost=Expensive
  40. ...
  41.  
  42. <bean id="car" class="Foo">
  43. <property name="carString" value="NANO" />
  44. </bean>
  45.  
  46. public void setCar(String carString) {
  47. this.carString = Car.valueOf(carString);
  48. }
  49.  
  50. Constructor con = MyEnum.class.getDeclaredConstructors()[0];
  51. Method[] methods = con.getClass().getDeclaredMethods();
  52. for (Method m : methods) {
  53. if (m.getName().equals("acquireConstructorAccessor")) {
  54. m.setAccessible(true);
  55. m.invoke(con, new Object[0]);
  56. }
  57. }
  58. Field[] fields = con.getClass().getDeclaredFields();
  59. Object ca = null;
  60. for (Field f : fields) {
  61. if (f.getName().equals("constructorAccessor")) {
  62. f.setAccessible(true);
  63. ca = f.get(con);
  64. }
  65. }
  66. Method m = ca.getClass().getMethod(
  67. "newInstance", new Class[] { Object[].class });
  68. m.setAccessible(true);
  69. MyEnum v = (MyEnum) m.invoke(ca, new Object[] {
  70. new Object[] { "MY_NEW_ENUM_VALUE", Integer.MAX_VALUE } });
  71. System.out.println(v.getClass() + ":" + v.name() + ":" + v.ordinal());
  72.  
  73. public enum Car {
  74. NANO(CarEnumerationInitializer.getNANO()), MERCEDES(
  75. CarEnumerationInitializer.getMERCEDES()), FERRARI(
  76. CarEnumerationInitializer.getFERRARI());
  77.  
  78. public final String cost;
  79. public final String madeIn;
  80.  
  81. Car(ICarProperties properties) {
  82. this.cost = properties.getCost();
  83. this.madeIn = properties.getMadeIn();
  84. }
  85. }
  86.  
  87. //Car's properties placeholder interface ...
  88. public interface ICarProperties {
  89. public String getMadeIn();
  90. public String getCost();
  91. }
  92. //... and its implementation
  93. public class CarProperties implements ICarProperties {
  94. public final String cost;
  95. public final String madeIn;
  96.  
  97. public CarProperties(String cost, String madeIn) {
  98. this.cost = cost;
  99. this.madeIn = madeIn;
  100. }
  101. @Override
  102. public String getCost() {
  103. return this.cost;
  104. }
  105. @Override
  106. public String getMadeIn() {
  107. return this.madeIn;
  108. }
  109. }
  110.  
  111. //Singleton that will be provide Car's properties, that will be defined at applicationContext loading.
  112. public final class CarEnumerationInitializer {
  113. private static CarEnumerationInitializer INSTANCE;
  114. private static ICarProperties NANO;
  115. private static ICarProperties MERCEDES;
  116. private static ICarProperties FERRARI;
  117.  
  118. private CarEnumerationInitializer(ICarProperties nano,
  119. ICarProperties mercedes, ICarProperties ferrari) {
  120. CarEnumerationInitializer.NANO = nano;
  121. CarEnumerationInitializer.MERCEDES = mercedes;
  122. CarEnumerationInitializer.FERRARI = ferrari;
  123. }
  124.  
  125. public static void forbidInvocationOnUnsetInitializer() {
  126. if (CarEnumerationInitializer.INSTANCE == null) {
  127. throw new IllegalStateException(CarEnumerationInitializer.class
  128. .getName()
  129. + " unset.");
  130. }
  131. }
  132.  
  133. public static CarEnumerationInitializer build(CarProperties nano,
  134. CarProperties mercedes, CarProperties ferrari) {
  135. if (CarEnumerationInitializer.INSTANCE == null) {
  136. CarEnumerationInitializer.INSTANCE = new CarEnumerationInitializer(
  137. nano, mercedes, ferrari);
  138. }
  139. return CarEnumerationInitializer.INSTANCE;
  140. }
  141.  
  142. public static ICarProperties getNANO() {
  143. forbidInvocationOnUnsetInitializer();
  144. return NANO;
  145. }
  146.  
  147. public static ICarProperties getMERCEDES() {
  148. forbidInvocationOnUnsetInitializer();
  149. return MERCEDES;
  150. }
  151.  
  152. public static ICarProperties getFERRARI() {
  153. forbidInvocationOnUnsetInitializer();
  154. return FERRARI;
  155. }
  156. }
  157.  
  158. <?xml version="1.0" encoding="UTF-8"?>
  159. <beans>
  160. <bean id="nano" class="be.vinkolat.poc.core.car.CarProperties">
  161. <constructor-arg type="java.lang.String" value="Cheap"></constructor-arg>
  162. <constructor-arg type="java.lang.String" value="India"></constructor-arg>
  163. </bean>
  164. <bean id="mercedes"
  165. class="be.vinkolat.poc.core.car.CarProperties">
  166. <constructor-arg type="java.lang.String" value="Expensive"></constructor-arg>
  167. <constructor-arg type="java.lang.String" value="Germany"></constructor-arg>
  168. </bean>
  169. <bean id="ferrari" class="be.vinkolat.poc.core.car.CarProperties">
  170. <constructor-arg type="java.lang.String"
  171. value="Very Expensive">
  172. </constructor-arg>
  173. <constructor-arg type="java.lang.String" value="Italy"></constructor-arg>
  174. </bean>
  175. <bean id="carInitializer"
  176. class="be.vinkolat.poc.core.car.CarEnumerationInitializer"
  177. factory-method="build" lazy-init="false">
  178. <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
  179. ref="nano" />
  180. <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
  181. ref="mercedes" />
  182. <constructor-arg type="be.vinkolat.poc.core.car.CarProperties"
  183. ref="ferrari" />
  184. </bean>
  185. </beans>
Add Comment
Please, Sign In to add comment