import java.lang.reflect.*;
class Ideone {
private static Ideone instance = new Ideone();
public static Ideone getInstance() {
return instance;
}
return VALUE;
}
private static final Integer NB_ITERATION
= 1_000_000
;
public static void main
(String[] args
) { for (Integer i
= 0; i
< NB_ITERATION
; i
++) { setStaticFieldValue(Ideone.class, "VALUE", i);
Integer value
= Ideone.
getInstance().
getVALUE(); if (!i.equals(value)) {
System.
out.
println("REFLECTION DID NOT WORK for iteration " + i
+ " vs " + value
); break;
}
//System.out.println("iter " + i + " ok");
}
}
private static void setStaticFieldValue(
final Class obj,
final String fieldName,
final Object fieldValue
) { try {
final Field field
= obj.
getDeclaredField(fieldName
); field.setAccessible(true);
final Field modifiersField
= Field.
class.
getDeclaredField("modifiers"); modifiersField.setAccessible(true);
modifiersField.
setInt(field, field.
getModifiers() & ~
Modifier.
FINAL); field.set(null, fieldValue);
"Error while setting field ["
+ fieldName
+ "] on object "
+ obj
+ " Message "
+ e.getMessage(),
e);
}
}
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CgpjbGFzcyBJZGVvbmUgewogIHByaXZhdGUgc3RhdGljIElkZW9uZSBpbnN0YW5jZSA9IG5ldyBJZGVvbmUoKTsKCiAgcHVibGljIHN0YXRpYyBJZGVvbmUgZ2V0SW5zdGFuY2UoKSB7CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfQoKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIFZBTFVFID0gbmV3IEludGVnZXIoMCk7CgogIHB1YmxpYyBJbnRlZ2VyIGdldFZBTFVFKCkgewogICAgcmV0dXJuIFZBTFVFOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW50ZWdlciBOQl9JVEVSQVRJT04gPSAxXzAwMF8wMDA7CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgIGZvciAoSW50ZWdlciBpID0gMDsgaSA8IE5CX0lURVJBVElPTjsgaSsrKSB7CiAgICAgIHNldFN0YXRpY0ZpZWxkVmFsdWUoSWRlb25lLmNsYXNzLCAiVkFMVUUiLCBpKTsKCiAgICAgIEludGVnZXIgdmFsdWUgPSBJZGVvbmUuZ2V0SW5zdGFuY2UoKS5nZXRWQUxVRSgpOwogICAgICBpZiAoIWkuZXF1YWxzKHZhbHVlKSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVGTEVDVElPTiBESUQgTk9UIFdPUksgZm9yIGl0ZXJhdGlvbiAiICsgaSArICIgdnMgIiArIHZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaXRlciAiICsgaSArICIgb2siKTsKICAgIH0KICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U3RhdGljRmllbGRWYWx1ZSgKICAgICAgZmluYWwgQ2xhc3Mgb2JqLCBmaW5hbCBTdHJpbmcgZmllbGROYW1lLCBmaW5hbCBPYmplY3QgZmllbGRWYWx1ZSkgewogICAgdHJ5IHsKICAgICAgZmluYWwgRmllbGQgZmllbGQgPSBvYmouZ2V0RGVjbGFyZWRGaWVsZChmaWVsZE5hbWUpOwogICAgICBmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwogICAgICBmaW5hbCBGaWVsZCBtb2RpZmllcnNGaWVsZCA9IEZpZWxkLmNsYXNzLmdldERlY2xhcmVkRmllbGQoIm1vZGlmaWVycyIpOwogICAgICBtb2RpZmllcnNGaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwogICAgICBtb2RpZmllcnNGaWVsZC5zZXRJbnQoZmllbGQsIGZpZWxkLmdldE1vZGlmaWVycygpICYgfk1vZGlmaWVyLkZJTkFMKTsKICAgICAgZmllbGQuc2V0KG51bGwsIGZpZWxkVmFsdWUpOwogICAgfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAiRXJyb3Igd2hpbGUgc2V0dGluZyBmaWVsZCBbIgogICAgICAgICAgICAgICsgZmllbGROYW1lCiAgICAgICAgICAgICAgKyAiXSBvbiBvYmplY3QgIgogICAgICAgICAgICAgICsgb2JqCiAgICAgICAgICAgICAgKyAiIE1lc3NhZ2UgIgogICAgICAgICAgICAgICsgZS5nZXRNZXNzYWdlKCksCiAgICAgICAgICBlKTsKICAgIH0KICB9Cn0K