我正在尝试创建一个ImmutableMap
将类映射到字符串的方法(注意:这当然只是一个示例!)。然而,像
ImmutableMap<Class<?>, String> map = ImmutableMap.of(
Integer.class, "Integer",
Date.class, "Date"
);
给我以下错误
Type mismatch: cannot convert from ImmutableMap<Class<? extends Object&Comparable<?>&Serializable>,String> to ImmutableMap<Class<?>,String>
奇怪的是,如果我Class<?>
向任何(!)键添加强制转换,它确实有效,即
ImmutableMap<Class<?>, String> map = ImmutableMap.of(
Integer.class, "Integer",
Date.class, "Date",
(Class<?>) String.class, "String",
long.class, "Long"
);
会工作得很好。我对这种行为感到有些困惑:首先,为什么没有演员表就行不通?所有这些都是类,它真的没有比 更通用Class<?>
,那么为什么它不起作用呢?其次,为什么对任何一个键进行强制转换可以让它工作?
(旁注:如果你想知道为什么我什至想做这样的事情——是的,这是因为反射……)
编辑:我实际上只是发现这会起作用,但我仍然想了解上述行为
ImmutableMap<Class<?>, String> map = ImmutableMap.<Class<?>, String>builder()
.put( Integer.class, "Integer" )
.put( Date.class, "Date" )
.build();