![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Вопрос возник такой :
в классе есть поле - public final static String OAuthConsumerKey = "key26"; при этом при создании оно используется setter
что заметил : после компиляции (произвел де компиляцию класса ) и увидел что значение строено в код
теперь как бы мы не изменяли значение - OAuthConsumerKey - в коде оно всегда будет равно старому значению ... т.е. засело там навсегда ... Как с таким бороться ? пока только пришла в голову идея использовать getter для OAuthConsumerKey ключа .... чтобы изменяя значение ключа изменялось его значение в откомпилированном коде ... как бороться со статик полями ? |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Не надо задавать вопросы с теме, которая создана для другого.
Теперь по сути вопроса - прблема в оптимизации компилятора. Он сам заменяет константы в коде. Так что декомпилятор выдает уже результат декомпиляции оптимизированного кода. И честно не понятно, что имелось с виду под "как с этим бороться". Обычно люди код декомпилируют не для того, чтобы его снова править. Может можно выставить какие-то параметра декомпилятора. Или запускать рефакторинг. |
|||
|
||||
| Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Проблема в том что после пересбоки jsp страницы (аналогично с jar арихивом) - и выкладки его на сервер - значение в сервере остается старое - т.е "key26" ,в скомпиллиных классах он считает что значение не изменилось - раз оно было задано как final static .
(Замечено на томкате, резине и гласфише). поэтому приходится удалять из серверных папок скомпиленые им классы руками . Это сообщение отредактировал(а) Atum - 3.9.2012, 11:50 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Убери final - оптимизации не будет.
|
|||
|
||||
| rang3r |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 2.4.2009 Репутация: нет Всего: нет |
при объявлении public static final String полей используй метод String#intern(). Ex:
Тогда строка не будет инлайниться, будет браться экземпляр из кэша, либо если его нет, то он создаться и поместиться туда. Это сообщение отредактировал(а) rang3r - 7.9.2012, 15:39 |
|||
|
||||
| Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
!!!Спасибо ! сам до этого тогда не дошел ! это как раз то решение которое я и искал! еще раз спасибо . действительно либо intern() либо через getter |
||||
|
|||||
![]()
|
| Правила форума "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. |