- 1
List selection = new ArrayList((s != null) ? s : new ArrayList());
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+84
List selection = new ArrayList((s != null) ? s : new ArrayList());
Больше мусора для бога сборщика мусора!
И где генерики?
Это старый код, написанный ещё до Java 5. Я как раз разгребала завалы и добавляла дженерики. Теперь там так:
Да. Кстати вы где-то спрашивали про претензии к тернарникам.
Так вот, в тернарниках автовывод женерика на этом методе не сработает.
Придется написать:
Collections<SimulationElement>.emptyList ()
= s != null ? new ArrayList( s ) : new ArrayList();
Collections.<SimulationElement>emptyList ();
наверное у меня джава неправильная
Что работает?
http://ideone.com/kwMRmw vs http://ideone.com/zQWly0
В 8-ой пытались чинить генерики, но немного сломали обратную совместимость.
Пруфы?
Про то что лет 5 назад в javaс6 был баг c женериками, которого не было в эклипсе, мне известно.
Но это было давно и неправда, поскольку его починили хер знает когда.
Глагол "работает" же в настоящем времени.
Ну офигеть. Прям вижуалстудия жабомира.
Во! Только об этом писал развернуто.
Ну и кагбе получается идиотская ситуация, есть некое надмножество компилятора, которое компилирует то что не хочет собирать стандартный javac.
В нём можно сделать всякие "полезные" РАСШИРЕНИЯ: добавить там сишный препроцессор, убрать ошибки на checked исключениях, сделать перегрузку операторов. И назвать это джавой.
Естественно нашу более "умную" джаву не будет собирать javac. То есть собрать код будет возможно только на ecj.
И тут у меня возникает де-жа-вю.
GHC ?
Улучшениями скучной явы когда-то занималась майкрософт, пока Sun их тово.
Вижуалстудия - очень уместная отсылка.
PS> В свете того что GHC под крылом Microsoft Research...
Да, зелёная шутка.
В GHC расширения языка нужно явными директивами включать (т.е. тупо положить на спеку не получится), и в реальности можно запилить поддержку аналогичных директив в других компиляторах.
Вот такой код выдаст 5.0:
Object value = true ? new Integer(5) : new Double(6);
А вот такой уже 5:
Object value = true ? (Object)new Integer(5) : (Object)new Double(6);
Причем это описано в спецификации
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html