0

私は2つのクラスを持っています:

public class Super {

    public static <T> T bar(Class<T> clazz){

        try {
            return (T)(clazz.newInstance());
        } catch (IllegalAccessException e) {           
            e.printStackTrace();
        } catch (InstantiationException e) {           
            e.printStackTrace();
        }
        return null;
    }
}

public class Sub extends Super{

    public static void main(String[] args){
        Sub s = Sub.bar(Sub.class);

    }
}

Class<T> clazzのパラメーターとして使用したくないbarので、どうすればジェネリック型を返すことができますかT、ありがとう。

4

2 に答える 2

2

できません。ジェネリックはコンパイル時のみであり、実行時には使用できません。したがって、実行時に T を知るためにを提供する必要があります。Class clazz

于 2012-07-04T08:41:22.653 に答える
1

新しいオブジェクトを作成するために Class インスタンスを提供することに問題はありません。

コードでオブジェクトを作成する必要がある場合、または一般的に一部のクラスを操作する必要がある場合は、インスタンスを渡す必要があります。このアクションは、他のオブジェクトの使用法と変わりません。ジェネリックは物事をより簡単にし、型の安全性を保証する必要があります。したがって、この場合、ウィッチ クラスの制限としてのみ使用でき、ジェネリック パラメータに何らかの制限を設定することで、bar 静的メソッドによって作成できます。

ところで。

が実装されているクラスから静的メソッドを呼び出すSub.bar(Sub.class)必要がありますSuper.bar(Sub.class)

于 2012-07-04T08:50:25.130 に答える