![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 2 Всего: 4 |
Необходимо создать константу, значание которой определяется при загрузке апликации, и оно может бытй разным. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Если на этапе компиляции это не константа, то смысла уже никакого.
Сделай класс, который будет инициализировать переменную внутри себя из какого-нибудь конфига и определи только get. |
|||
|
||||
| PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 2 Всего: 4 |
хмм... А чем мой вариант плох?
Всё компилится! До тех пор пока ету "константу" не используем в свиче... Добавлено через 27 секунд Помоему, так сделать просто нельзя (без рефлексии) |
|||
|
||||
| niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
Нетипично очень, так final константы не определяют. Не надо так делать, другим же потом этот код читать
-------------------- SCJP 5.0, SCJD |
|||
|
||||
| PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 2 Всего: 4 |
Ничего нeчитабельного в таком определении не вижу.
Другое дело что ето не совсем константа получается.... Несмотря на то что атрибут определён как: public static final Это сообщение отредактировал(а) PashaOvechkin - 11.7.2008, 10:40 |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
А Вы сможете гарантировать что вызов SuperClass.isSomethingOK() вернёт то адекватное значение? Порядок инициализации Вы как синхронизируете?
Момент инициализации статических полей остаётся на усмотрение виртуальной машины. Обычно это происходит в момент загрузки класса, но не факт. Главное, что бы поле было инициализировано раньше чем прочитано. Существует определённая вероятность, что SuperClass.isSomethingOK() вернёт не верное значение в момент инициализации поля isFine. |
|||
|
||||
| PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 2 Всего: 4 |
Я же ничего не утверждаю... Порядок инициализации статуческих компонентов в апликации одному богу (йвм) известен.
Мне кажется странным что дозволено делать вот так ->
вроде как константа создаётся, но в итоге она левая какая то получается |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
В switch можно использовать только COMPILED TIME constant, а не просто константу. -------------------- Lost.... |
|||
|
||||
| Shurr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 5 Всего: 7 |
PashaOvechkin
Идеология switch подразумевает увеличение скорости выполнения условных конструкций за счет создания таблицы переходов по заранее заданным значениям. Для создания таблицы переходов значение константы должно быть определено на этапе компиляции, а не на этапе выполнения. |
|||
|
||||
| PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 2 Всего: 4 |
Спасибо - не знал етого
А можно ссылочку для верности?? |
|||
|
||||
| Ulysses4j |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 2 Всего: 10 |
Kangaroo, интересно, спасибо за инфо, несколько неожиданно.
К примеру:
Knudsen, Niemeyer. Learning Java 3ed, 2005: 4.4.1.5 switch statements. -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
||||
|
|||||
| Shurr |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 5 Всего: 7 |
Если по поводу требования compile-time constant - то тут прямая дорога к JLS. В частности пункт 14.10 The switch Statement так определяет лейбы:
Пункт же 15.28 Constant Expression, на который идет ссылка, в числе прочего говорит:
Т.е. ни о каких вызовах методов при инициализации значения речи не идет. Что же касается преимущественной реализации оператора switch через таблицу переходов - в JLS этого, естественно, нету, т.к. это детали реализации. Но то, что исторически сложилось именно так - это факт. Так, навскидку, ссылок даже и не дам, разве что википедию
А вообще мне кажется это в литературе по компиляторам должно быть. |
||||||||
|
|||||||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Не зря, все-таки, подготовка к SCJP проходит Shurr, спасибо за дополнительную инфу. -------------------- Lost.... |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |