如何交互ArrayList <class <? extends =“”imyinterface =“”>&gt;

时间:2017-11-02 07:26:52

标签: java arraylist interface iteration

我有ArrayList<Class<? extends IMyInterface>> classes = new ArrayList<>();。当我尝试迭代它时,我得到:

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

我的迭代

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

红色代码警告突出显示(Android Studio)

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();
    }
}

错误

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

我怎样才能迭代它?

提前谢谢大家。

2 个答案:

答案 0 :(得分:5)

您希望迭代IMyInterface的实例,因为您要调用IMyInterface的特定方法:

    View revPluggableViewLL = myClass.getMyInterfaceMethod();

问题是您声明了ListClass个实例:

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

它不包含IMyInterface的任何实例,只包含Class个实例。

为了满足您的需求,请声明IMyInterface

的列表
List<IMyInterface> instances = new ArrayList<>();

以这种方式使用它:

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

请注意,此检查不是必需的:

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

您操纵List IMyInterface,因此List的元素必然是IMyInterface的实例。

答案 1 :(得分:2)

myClassClass的一个实例,它不会实现IMyInterface(即使它是Class<IMyInterface>)。因此,您永远不能在getMyInterfaceMethod()上执行myClass