- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
public class Test {
public static final int a;
static {
System.out.println(Main.a);
a = 42;
System.out.println(Main.a);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+72
public class Test {
public static final int a;
static {
System.out.println(Main.a);
a = 42;
System.out.println(Main.a);
}
}
javac такой javac...
Так видит проблему: http://ideone.com/jhPN5X
А вот так - нет: http://ideone.com/qAMIvH
readonly == final
const == static final. и никаких заданий в статическом конструкторе.
static const == static final с присваиванием в статическом конструкторе.
http://ideone.com/af2eI3
Ну и кстати.
https://ideone.com/MpvQLs
http://ideone.com/q2G1mw
Пример борманда неявно превращается в код, который исполнится в статическом конструкторе.
const это запрещает.
Я тут пояснил. Только с очепяткой
static readonly == static final.
По сути const == static final, только с явным вычислением в compile-time.
Потому и присваивание в статическом конструкторе запрещено.
И так как в коде main() задан порядок обращений к классам - сначала взять из Test1, который берет 42 из Test2, итд то можно разрулить цикл и сделать вычисление.
А вот при компиляции явно заданного порядка нет. Посему разрешить цикл не представляется возможным.
EJ, JCP и FAQ по женерикам (там на сайте лежит pdf, и она вполне могла бы продавать свой труд как книгу) - это именно те три необходимые и достаточные книжки, которые нужно прочитать жаба-кодеру.
Ну а Puzzlers - развлекуха, примерно как говнокод читать. Он во-многом повторяет и дополняет EJ.