1

我有以下在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

4 回答 4

1

您将不得不摆脱泛型,然后在使用 get 和 put 方法时适当地转换值。您还需要确保布尔 ThreadLocal 在代码中使用的位置正确初始化。

于 2010-02-05T10:51:43.510 回答
1
  • 删除泛型。
  • 移除协变回报。
  • 删除@Override注释。

所以

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

使用时

  • 将值转换回Boolean.
  • 用 拆箱.booleanValue()
  • Boolean.valueOf.
于 2010-02-05T11:49:21.647 回答
0

如果程序正确写入 Java 1.4 行为,但使用 Java 1.5+ 表示法,我们多次使用的方法是使用 Retroweaver 将编译后的 Java 1.5 字节代码转换为 Java 1.4 字节代码。

http://retroweaver.sourceforge.net/

其他存在,但这是我们发现效果最好的一个。

于 2010-02-05T13:45:22.357 回答
-1

您可以随时从 sun 下载源代码并查看 ThreadLocal 类。

或使用此链接

于 2010-02-05T10:40:44.137 回答