-1

ジェネリックを使用してユーザーを登録したい。タイプ T に応じて、どのマネージャーをインスタンス化するかを決定したいと考えています。これが私がこれまでに持っているものです:

private <T extends SharingManager> void registerUsersInManager(List<User> usersToRegister){
    for(User u: usersToRegister){
        registry.put(u, new T(u));
    }
}

Eclipse から、型 T をインスタンス化できないというエラーが表示されます。

構文エラーを犯しただけなのか、それとも概念全体を台無しにしたのかはわかりません。ジェネリックでやりたいことを達成することは可能ですか?

4

2 に答える 2

1

new T(u) これはあなたができないことです。

ジェネリックは、Java の型消去を使用して実装されます。ほとんどの一般的な情報はコンパイル時に失われ、実行時に T の実際の値を知ることはできません。これは、単にジェネリック型をインスタンス化できないことを意味します。

次のように正しく書くことができます

private <T extends SharingManager> void registerUsersInManager(List<User> usersToRegister, Class<T> obj){
for(User u: usersToRegister){
    registry.put(u, obj.newInstance());
}
}
于 2013-11-11T12:52:49.660 に答える