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 に答える