1

一般的なリストをロードしたい。したがって、次のような関数を使用したい:

public static <T> List<T> load()
{
    FileInputStream fileStream = null;
    List<T> toReturn = new ArrayList<T>();
    String fileExtension = toReturn.getClass().getComponentType().getSimpleName();
    ...
}

これらの拡張子を持つファイルを検索するために、タイプ (「T」) を取得したいことがわかる場合。しかし、私が電話した場合:

StorageUtil.<MyClass>load();

「MyClass」を fileExtension として取得する代わりに、例外を取得します。コードの何が問題になっていますか?

4

1 に答える 1

8

問題は、Java のジェネリックがそのように機能しないことです。型消去Tが原因で、実行時に型を見つけることができません。実行時に型が必要な場合は、パラメーターを追加できます。Class<T>

public static <T> List<T> load(Class<T> clazz) {
    ... use class.newInstance() to create a new instance, etc
}

詳細については、Type Erasure の Java Generics FAQ エントリを参照してください。

于 2013-05-04T16:09:43.637 に答える