そのような入力データでは、このような動作を行うことはできません。 List<X>
リストにXクラスのインスタンスが必要ですが、タイプClass<? extends X>
のオブジェクトを追加しようとしています。 XがNumber(簡単のため)であるとしましょう。Double、Integer、CharacterなどNumberの子を持ちます。 それで、次のことをやっています:のオブジェクトを数字だけを保持できるリストに追加します(Class<Integer>
、Class<Double>
などではありません)。あなたがすることができる唯一のことは、それが反射を利用して、このようClass<Integer>
、Class<Double>
のインスタンスを作成します:
List<X> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx.newInstance());
をしかし、それは、このような方法で、リフレクションを使用するので、悪い考えです。まだ Class<X>
がClass<? extends X>
と同じではありませんので
List<Class<X>> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx);
: はたぶん、あなたはこの何かを意味しました。
List<X> list = //some values;
Set<? extends X> set = = //some values;
for (X elem : set) list.add(elem);
最終1が良さそうだし、それが動作するはずです: は、しかし、多分あなたは、このような何かを意味しました。
'X'と' Class extends X> 'は非常に異なるタイプです。書かれているように、少なくともリフレクションを使って 'Class extends X>'の新しいインスタンスを作成する必要があります。あなたは 'Class >'を持っているときにインスタンスを作成する方法についてあなたの質問ですか? –
[クラス名と呼び出し元コンストラクタを使用してインスタンスを作成する]の可能な複製(https://stackoverflow.com/questions/6094575/creating-an-instance-using-the-class-name-and-calling-constructor) –