2017-11-02 19 views
2

私はArrayList<Class<? extends IMyInterface>> classes = new ArrayList<>();を持っています。私はそれを反復処理しようとすると、私が手:ArrayList <class <?をインターラートする方法IMyInterface >>

Incopatible types: 
Required: java.lang.Class <? extends IMyInterface> 
Found: IMyInterface 

マイ反復

for (IMyInterface iMyInterface : IMyInterface.getMyPluggables()) {} 

レッドコード警告ハイライト(アンドロイドスタジオ)

Error:(35, 90) error: incompatible types: Class<? extends IMyInterface> cannot be converted to IMyInterface 

私は

したいです
ArrayList<Class<? extends IMyInterface>> classes = new ArrayList<>(); 

for (Class<? extends IMyInterface> myClass : classes) { 
    if (myClass instanceof IMyInterface) { 
     View revPluggableViewLL = myClass.getMyInterfaceMethod(); 
    } 
} 

ERROR

Inconvertible types; cannot cast 'java.lang.Class<capture<? extends com.myapp.IMyInterface>>' to 'com.myapp.IMyInterface' 

どのように私はそれを反復処理については行くことができますか?

ありがとうございます。あなたはIMyInterfaceの特定のメソッドを呼び出すしたいとIMyInterfaceのインスタンスで反復処理したい

+0

あなたは 'ArrayList > 'ではなく、' ArrayList 'を継承します。ところで、これはあなたが望むものではありません... 'Class'は型を表すインスタンスであり、その型自体のインスタンスではありません。したがって、 'instanceof IMyInterface'は決して真実ではありません。 – AxelH

答えて

5

ArrayList<Class<? extends IMyInterface>> classes = new ArrayList<>(); 

それを:

View revPluggableViewLL = myClass.getMyInterfaceMethod(); 

問題は、あなたがListClassのインスタンスを宣言したということですIMyInterfaceのインスタンスは含まず、Classインスタンスのみが含まれます。

IMyInterfaceのリストを宣言し、あなたの必要性を達成するために:

List<IMyInterface> instances = new ArrayList<>(); 

そして、このようにそれを使用する:このチェックが必要とされていないことを

for (IMyInterface myInterface : instances) { 
    View revPluggableViewLL = myInterface.getMyInterfaceMethod(); 
} 

注:

if (myClass instanceof IMyInterface) { 
    View revPluggableViewLL = myClass.getMyInterfaceMethod(); 
} 

ListIMyInterfaceを操作します。 Listの要素は、必ずIMyInterfaceのインスタンスです。

+0

応答@davidxxxをありがとう。これで、 'IMyInterface'のインスタンスを' List instances = new ArrayList <>(); 'に追加することはできません。私は 'ArrayList > instances = new ArrayList <>();を継承しています。それを修正する提案はありますか?ありがとうございました。 –

+0

あなたは大歓迎です。なぜあなたはあなたのリストに 'クラス'を必要としていると思いますか? 'Class'esはクラス構造/定義を表し、' IMyInterface'のインスタンスは表しません。 – davidxxx

+0

これは私が先に質問した質問へのフォローアップです。[ArrayListにインターフェイスを実装するクラスを追加する方法](https://stackoverflow.com/questions/47067888/how-to-add-a-class-私は[Ramanlfcの答え](https://stackoverflow.com/a/47068064/3663765)を受け入れました。 –

2

myClassは、であってもIMyInterfaceを実装していないClassのインスタンスです。したがって、にはgetMyInterfaceMethod()を実行することはできません。

関連する問題