我有类似的东西:
private static LinkedHashMap<Class<?>, ?> configFiles;
和静态方法:
@SuppressWarnings("unchecked")
public static <T> T getConfigFile(Class<T> clazz) throws Exception {
return (T) configFiles.get(clazz);
}
但我有init方法:
configFiles = new LinkedHashMap<Class<T>, T>();
并且没有编译:/
但如果我这样做的话:
@SuppressWarnings("unchecked")
@Override
public void intitConfigFiles()
throws ClassNotFoundException, ConfigurationFilesException
{
configFiles = new LinkedHashMap<Class<?>, T>();
}
它的工作,但我不知道如何使用方法put:/
Class<T> clazz = (Class<T>) Class.forName(prop.getValue());
jc = JAXBContext.newInstance(clazz);
u = jc.createUnmarshaller();
configFiles.put( clazz, u.unmarshal(inputStream));
我在Eclipse中遇到错误我不知道如何正确使用put方法?
答案 0 :(得分:3)
Class<?>
与Class<T>
的类型不同,因为它用作类型参数,所以它必须完全相同。由于静态变量的类型为Class<?>
,因此尝试分配更具体的内容时,您无法获得任何结果。只需使用
Class<?> clazz = Class.forName(prop.getValue));
并将其放入地图中。无论如何,泛型对你的情况无能为力,因为类型T
在运行时被删除。
答案 1 :(得分:1)
configFiles
应为LinkedHashMap<Class<?>, Object>
类型;否则,正如你所观察到的,你不能把任何东西放进去。 Object
允许您将任何内容放入其中,因为任何内容都是Object
的实例,而?
不允许您将除null
之外的任何内容放入其中,因为它必须是未知类型的实例。
然后您应该使用new LinkedHashMap<Class<?>, Object>