Han*_*örr 4 java generics map literals
我试图在java中编写一个类型安全的地图文字辅助类,它可以生成任何类型的地图,并让编译器检查所有给定的键和值是否符合地图的类型.对于具有两个值的地图,将有一个具有以下签名的函数:
public static <KEY, VALUE> Map<KEY, VALUE> make(final KEY key1,
final VALUE value1,
final KEY key2,
final VALUE value2)
Run Code Online (Sandbox Code Playgroud)
现在我希望这样的事情是可能的:
Map<Integer, Object> map = make(1, "bla", 3, 17);
Run Code Online (Sandbox Code Playgroud)
但是我收到编译器错误:
Type mismatch: cannot convert from Map<Integer,Object&Serializable&Comparable<?>> to
Map<Integer,Object>
Run Code Online (Sandbox Code Playgroud)
有没有办法来解决这个问题?当然,使用签名定义函数make(Object... keysAndValues)会起作用,但是我会放弃编译时类型安全.:-(
错误可能在这里:
Map<Integer, Object> map = make(1, "bla", 3, 17);
^^^^^ ^^
Run Code Online (Sandbox Code Playgroud)
VALUE > Object不能从两个推断String和Integer
尝试以下任何一个:
// Helping the compiler to infer Object for VALUE
Map<Integer, Object> map = make(1, (Object)"bla", 3, 17);
// Explicitly bind VALUE to Object
Map<Integer, Object> map = MyClass.<Integer, Object>make(1, "bla", 3, 17);
// If you don't need to write into "map" (as user pmnt also suggested)
Map<Integer, ?> map = make(1, "bla", 3, 17);
Run Code Online (Sandbox Code Playgroud)