2017-08-14 10 views
0

私は現在、いくつかのリフレクションのものに取り組んでおり、私は初心者です。 クラス<? extends X>からX

私はこの得た:

List<X> list; 
Set<Class<? extends X>> set; 

をそして私はこのような何かをしたい:

for (Class<? extends X> classx : set) list.add(classx); 

しかし、私はそれを達成するためにどのように何かを見つけることができませんでした。 誰かが私を助けることができますか?

+3

'X'と' Class 'は非常に異なるタイプです。書かれているように、少なくともリフレクションを使って 'Class 'の新しいインスタンスを作成する必要があります。あなたは 'Class 'を持っているときにインスタンスを作成する方法についてあなたの質問ですか? –

+0

[クラス名と呼び出し元コンストラクタを使用してインスタンスを作成する]の可能な複製(https://stackoverflow.com/questions/6094575/creating-an-instance-using-the-class-name-and-calling-constructor) –

答えて

0

そのような入力データでは、このような動作を行うことはできません。 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が良さそうだし、それが動作するはずです: は、しかし、多分あなたは、このような何かを意味しました。

+0

しかし、リストを持っている必要があります。なぜなら、これらのオブジェクトでいくつかのメソッドを呼び出す必要があるからです。 セットを持っているのは私が得ようとしているものです。 –

+0

@MaëlGrivotそう、私はいくつかの質問をさせてください。まず第一に、Set >が本当にセットされていますか?おそらくセットがセットされていますか? 1つのバリアント - まず、クラスをインスタンス化する必要があります。なぜなら、Java変数クラス someVarは、クラスのオブジェクトです(クラスオブジェクトとしましょう)。クラスオブジェクトにはリフレクトのためのメソッド(newInstance())があります。このクラスオブジェクトから作成する - クラスの括弧内に指定されたタイプのオブジェクトです。 –

+0

はいリストを含むSet >抽象クラスを継承するクラスのクラスです。 –

関連する問題