具有Function <X,Y>值的UnmodifiableMap无法编译

Die*_*oia 1 java collections function unmodifiable

我有一个参考:

public final static LinkedHashMap<String, Function<OrderBean, String>> DELEGATES;
Run Code Online (Sandbox Code Playgroud)

我初始化像这样:

static {
    LinkedHashMap<String, Function<OrderBean, String>> tmp = new LinkedHashMap<>();
    tmp.put(OrderCols.FIELD1, OrderBean::getFIELD1);
    tmp.put(OrderCols.FIELD2, OrderBean::getFIELD2);
    ...        
    DELEGATES = Collections.unmodifiableMap(tmp);
}
Run Code Online (Sandbox Code Playgroud)

在静态块的最后一行(对DELEGATES的赋值),我收到此编译器错误:

错误:(64、48)Java:不兼容的类型:不存在类型变量为K,V的实例,因此java.util.Map符合java.util.LinkedHashMap>

我搞砸了吗?还是不可修改的视图不喜欢函数类型?

Lou*_*man 5

不,您的问题是

public final static LinkedHashMap<String, Function<OrderBean, String>> DELEGATES;
Run Code Online (Sandbox Code Playgroud)

你应该有

public final static Map<String, Function<OrderBean, String>> DELEGATES;
Run Code Online (Sandbox Code Playgroud)

...因为unmodifiableMap返回一个简单的Map实现。(尽管,后备数据结构仍为LinkedHashMap)。