Портирование JDK1.5 ThreadLocal кода на JDK1.4 - PullRequest
1 голос
/ 05 февраля 2010

У меня есть фрагмент кода, который работает на JDK5

private static ThreadLocal<String> messages = new ThreadLocal<String>();
private static ThreadLocal<Boolean> dontIntercept = new ThreadLocal<Boolean>() {
    @Override
    protected Boolean initialValue() {
        return Boolean.FALSE;
        }
};

Я хочу запустить его на JDK1.4. Посоветуйте, пожалуйста, какие изменения потребуются

Ответы [ 4 ]

1 голос
/ 05 февраля 2010

Вам нужно будет избавиться от обобщений и затем привести значения соответствующим образом при использовании методов get и put.Вам также необходимо убедиться, что логический ThreadLocal правильно инициализирован там, где он используется в коде.

1 голос
/ 05 февраля 2010
  • Удалить дженерики.
  • Удалить ковариантный возврат.
  • Удалить @Override аннотацию.

So

private static final ThreadLocal messages = new ThreadLocal();
private static final ThreadLocal dontIntercept = new ThreadLocal() {
    protected Object initialValue() {
        return Boolean.FALSE;
    }
};

При использовании

  • Приведение значения обратно к Boolean.
  • Распаковать с .booleanValue().
  • Коробка с Boolean.valueOf.
0 голосов
/ 05 февраля 2010

Если программа правильно написана для поведения Java 1.4, но использует нотацию Java 1.5+, мы несколько раз использовали подход Retroweaver для преобразования скомпилированного байтового кода Java 1.5 в байтовый код Java 1.4.

http://retroweaver.sourceforge.net/

Другие существуют, но мы нашли, что это работает лучше всего.

0 голосов
/ 05 февраля 2010

Вы всегда можете скачать исходный код от Sun и взглянуть на класс ThreadLocal.

Или используйте эту ссылку

...