0

我有一些这样的代码,我将映射存储到java threadlocal,

import java.util.*;

class Foo {
  private final ThreadLocal<Map<String, String>> barMap = ThreadLocal.withInitial(HashMap::new);
}

从 checkerframework 启用空值检查时,我得到

Error: [type.argument.type.incompatible] incompatible types in type argument.
   found   : @Initialized @NonNull Map<@Initialized @NonNull String, @Initialized @NonNull String>
   required: [extends @Initialized @Nullable Object super null]

我不明白如何解决这个问题。

4

1 回答 1

1

这是 Checker Framework 中的一个已知错误。您应该抑制警告。

Checker Framework 当前使用 Java 7 类型推断算法。Java 8 对类型推断进行了重大更改,这需要在 Checker Framework 中重新实现。(Checker Framework 本身本质上就是一个编译器。)重新实现已部分完成,但尚未完成。

于 2020-07-24T17:15:22.377 回答