web-dev-qa-db-ja.com

Springフレームワークでジェネリックを使用するオブジェクトをインスタンス化するにはどうすればよいですか?

私は次のようなクラスを持っています:

class Dao<T>{
...
}

私はこれをしたい:

new Dao<Student>();

springXML構成から。

それはできますか?どうやって?

37
flybywire

型消去 について読むと、これをもう少しよく理解するのに役立つはずです。

実行時に、ジェネリッククラスの型パラメーターは消去されます。つまり、cletusが言ったように、Javaのジェネリックは基本的に構文糖衣構文であり、コンパイル時の機能にすぎません。

Springは実行時にオブジェクトをインスタンス化するため、実際には任意のタイプのDaoを自由にインスタンス化できます。実際、SpringがDaoを作成してStudentタイプ、別のメソッドではTeacherタイプ。

つまり、基本的に答えは、Springは、Dao型がパラメーター化されることを意図しており、それを使用して何もできないことを認識していません。

55
matt b

あなたはそれをすることができません、そしてあなたがそれをすることができない理由はそれが実際には何も意味しないということです。つまり、Javaジェネリックはシンタックスシュガーなので、Beanを作成するタイプは関係ありません。Dao(またはDao)を使用するものなら何にでも注入でき、その時点で問題ありません。」注入されたタイプの暗黙的なキャストを使用します。

8
cletus