fork download
  1. import java.lang.reflect.*;
  2.  
  3. class Ideone {
  4. private static Ideone instance = new Ideone();
  5.  
  6. public static Ideone getInstance() {
  7. return instance;
  8. }
  9.  
  10. private static final Integer VALUE = new Integer(0);
  11.  
  12. public Integer getVALUE() {
  13. return VALUE;
  14. }
  15.  
  16. private static final Integer NB_ITERATION = 1_000_000;
  17.  
  18. public static void main(String[] args) {
  19. for (Integer i = 0; i < NB_ITERATION; i++) {
  20. setStaticFieldValue(Ideone.class, "VALUE", i);
  21.  
  22. Integer value = Ideone.getInstance().getVALUE();
  23. if (!i.equals(value)) {
  24. System.out.println("REFLECTION DID NOT WORK for iteration " + i + " vs " + value);
  25. break;
  26. }
  27. //System.out.println("iter " + i + " ok");
  28. }
  29. }
  30.  
  31. private static void setStaticFieldValue(
  32. final Class obj, final String fieldName, final Object fieldValue) {
  33. try {
  34. final Field field = obj.getDeclaredField(fieldName);
  35. field.setAccessible(true);
  36. final Field modifiersField = Field.class.getDeclaredField("modifiers");
  37. modifiersField.setAccessible(true);
  38. modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
  39. field.set(null, fieldValue);
  40. throw new RuntimeException(
  41. "Error while setting field ["
  42. + fieldName
  43. + "] on object "
  44. + obj
  45. + " Message "
  46. + e.getMessage(),
  47. e);
  48. }
  49. }
  50. }
  51.  
Success #stdin #stdout 0.05s 2184192KB
stdin
Standard input is empty
stdout
REFLECTION DID NOT WORK for iteration 256 vs 255