具有Function <x,y =“”>值的UnmodifiableMap无法编译

时间:2015-05-27 16:20:20

标签: java function collections unmodifiable

我有一个参考:

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&gt;

我搞砸了什么?或者不可修改的观点不像函数类型?

1 个答案:

答案 0 :(得分:4)

不,你的问题不是

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

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

...因为unmodifiableMap返回了一个裸Map实现。 (但是,后备数据结构仍然是LinkedHashMap。)