6

私はJavaのジェネリックを学んでいますが、ジェネリックパラメーターから受け取った型をインスタンス化する際に問題が発生しました(ただし、これはC#で可能です)

class Person { 
    public static <T> T say() {
        return new T; // this has error
    }
}

私はこれを試しました:Javaのジェネリック - Tのインスタンス化

public static <T> T say(Class<?> t) {
    return t.newInstance();
}

エラー:

incompatible types
found   : capture#426 of ?
        required: T

それはうまくいきません。以下は問題ないように見えますが、一部のクラスのインスタンス化が必要であり、静的メソッドでは使用できません: Java でのジェネリック型のインスタンス化

public class Abc<T>
 {

    public T getInstanceOfT(Class<T> aClass)
    {
       return aClass.newInstance();
    }      

} 

これはJava 関係者が言っている型消去ですか? これは型消去の制限ですか?

この問題の回避策は何ですか?

4

1 に答える 1

8

あなたはとても親しかった。Class<?>(「任意の型のクラス」Class<T>を意味する) を (「型 T のクラス」を意味する)に置き換える必要があります。

public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException {
    return t.newInstance();
}
于 2012-05-07T04:19:07.813 に答える