Java sabitini değiştirmem gereken bir durum var.Statik değişkenin değiştirilmesi İlkel Sarıcı ile çalışır ancak ilkel tipte değil
Ben
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class Main {
public static final Integer FLAG = 44;
static void setFinalStatic(Class<?> clazz, String fieldName, Object newValue) throws NoSuchFieldException, IllegalAccessException {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Field modifiers = field.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void main(String... args) throws Exception {
System.out.printf("Everything is %s%n", FLAG);
setFinalStatic(Main.class, "FLAG", 33);
System.out.printf("Everything is %s%n", FLAG);
}
}
Yukarıda çalıştırırsanız, ben çıkış aşağıdaki almak çalışma koduna aşağıda bulunmaktadır:
Everything is 44
Everything is 33
Ama FLAG
değişkeni değiştirirseniz yani
public static final int FLAG = 44;
int O çalışmıyor. çıktısı:
Everything is 44
Everything is 44
o Primitive
Tip int
ile çalışması için başka bir yolu var mı.
Eğer değiştirmek isterseniz, değişken sonunu neden bildiriyorsunuz? Finali kaldır. Yukarıdaki yoruma – mvmn
+1. Kolay cevap, ints olmayan değişkendir, ama ben –
derleme zaman sabitleri inline ile cevap vermek için yeterli derin java bilmiyorum. Değer çalışma zamanına kadar bilinmiyorsa, değiştirilebilir. Not: 'final' değişkenlerini değiştirmek, karışıklığa neden olduğundan, bunu aslında üretimde yapmazsınız. –