1

我有类似的东西:

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 方法?

4

2 回答 2

3

Class<?>与 and不是同一类型Class<T>,因为它用作类型参数,所以它必须是完全相同的类型。由于您的静态变量的类型有Class<?>,因此您尝试分配更具体的内容将一无所获。只需使用

Class<?> clazz = Class.forName(prop.getValue));

并将其放入地图中。无论如何,泛型对您的情况无能为力,因为类型T在运行时被删除。

于 2012-08-01T12:58:00.313 回答
1

configFiles应该是类型LinkedHashMap<Class<?>, Object>;否则,正如你所观察到的,你不能把任何东西放进去。Object将允许您将任何内容放入其中,因为任何内容都是 的实例Object,而?不允许您将任何内容null放入其中,因为它必须是未知类型的实例。

然后你应该用new LinkedHashMap<Class<?>, Object>

于 2012-08-01T17:53:37.733 回答