【发布时间】:2022-09-23 14:36:22
【问题描述】:
我在这里收到警告,说 Map 是原始类型。
// Map is a raw type. References to generic type Map<K,V> should be parameterized
Class<Map> c = Map.class;
但是如果我参数化类型,那么我会得到一个不匹配的结果:
// Type mismatch: cannot convert from Class<Map> to Class<Map<Object,Object>>
Class<Map<Object, Object>> c = Map.class;
我尝试了一些变体,但我找不到任何方法来参数化表达式的右侧 (Map.class) 以满足已参数化的左侧。
在这种情况下如何参数化Map.class?
在这种情况下,我将它传递给带有签名的方法:
public <T> T method(Class<T> type) {
return (T) otherMethod(type);
}
我只想提供Map 类型,因为我不知道内部使用的是哪种地图,这个细节并不重要。我正在尝试解决调用该方法时收到的警告:
// Type safety: The expression of type Map needs unchecked conversion to conform to Map<String,Object>
Map<String, Object> a = method(Map.class);
-
你想用
c做什么?取决于此,将其保留为Class<Map> c = Map.class;是安全的。 -
我为我的用例添加了一些进一步的说明。它应该是安全的,但我想知道是否有一种方法可以满足编译器而不必抑制警告。