- 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
bormand 14.02.2013 15:38 # 0
Govnocoder#0xFF 14.02.2013 15:50 # 0
bormand 14.02.2013 15:55 # +2
3.14159265 14.02.2013 16:01 # +1
readonly == final
const == static final. и никаких заданий в статическом конструкторе.
static const == static final с присваиванием в статическом конструкторе.
http://ideone.com/af2eI3
3.14159265 14.02.2013 15:52 # +1
Ну и кстати.
bormand 14.02.2013 16:18 # +2
https://ideone.com/MpvQLs
absolut 14.02.2013 16:35 # +2
3.14159265 14.02.2013 16:43 # +2
http://ideone.com/q2G1mw
Пример борманда неявно превращается в код, который исполнится в статическом конструкторе.
const это запрещает.
absolut 14.02.2013 17:16 # 0
3.14159265 14.02.2013 17:23 # 0
Я тут пояснил. Только с очепяткой
static readonly == static final.
По сути const == static final, только с явным вычислением в compile-time.
Потому и присваивание в статическом конструкторе запрещено.
И так как в коде main() задан порядок обращений к классам - сначала взять из Test1, который берет 42 из Test2, итд то можно разрулить цикл и сделать вычисление.
А вот при компиляции явно заданного порядка нет. Посему разрешить цикл не представляется возможным.
someone 14.02.2013 17:07 # +2
bormand 14.02.2013 17:13 # 0
absolut 14.02.2013 17:23 # +1
bormand 14.02.2013 17:42 # +3
3.14159265 14.02.2013 17:58 # +3
EJ, JCP и FAQ по женерикам (там на сайте лежит pdf, и она вполне могла бы продавать свой труд как книгу) - это именно те три необходимые и достаточные книжки, которые нужно прочитать жаба-кодеру.
Ну а Puzzlers - развлекуха, примерно как говнокод читать. Он во-многом повторяет и дополняет EJ.
Govnocoder#0xFF 16.02.2013 19:13 # 0
roman-kashitsyn 16.02.2013 20:09 # +2
Govnocoder#0xFF 16.02.2013 21:29 # 0