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