具有 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
。)
我有一个参考:
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
。)