我有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'
我怎样才能迭代它?
提前谢谢大家。
答案 0 :(得分:5)
您希望迭代IMyInterface
的实例,因为您要调用IMyInterface
的特定方法:
View revPluggableViewLL = myClass.getMyInterfaceMethod();
问题是您声明了List
个Class
个实例:
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)
myClass
是Class
的一个实例,它不会实现IMyInterface
(即使它是Class<IMyInterface>
)。因此,您永远不能在getMyInterfaceMethod()
上执行myClass
。