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

UnmodifiableMap with Function<X, Y> values fails to compile

我有一个参考:

public final static LinkedHashMap<String, Function<OrderBean, String>> DELEGATES;

我初始化如下:

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);
}

在静态块的最后一行(分配给 DELEGATES),我得到这个编译器错误:

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

我是不是搞砸了什么?或者不可修改的视图不喜欢函数类型?

不,你的问题是

public final static LinkedHashMap<String, Function<OrderBean, String>> DELEGATES;

你应该

public final static Map<String, Function<OrderBean, String>> DELEGATES;

...因为 unmodifiableMap returns 一个简单的 Map 实现。 (不过,支持数据结构仍将是 LinkedHashMap。)