Java:从扩展接口的通用列表调用接口的函数
我想要一个对象列表,所有对象都从包含函数go()的同一接口继承
public interface goers{
public void go();
}
现在我有3个类都实现了go,为了简单起见,我们把它们叫做A、B和C
在另一个类中,我有一个我想做的List<Class<? extends goers>>
for (Class<? extends goers> gos : list)
{
gos.go();
}
但它不会编译,因为编译器不会从应用于列表所有成员的接口中提取go方法
# 1 楼答案
因为
go()
不是Class<T>
的方法,所以不能在Class<T>
的实例上调用该方法。只能使用https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html的方法如果您想要一个
goers
[sic-遵循命名约定]的实例,您需要以某种方式获得一个。例如,您可以使用https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#newInstance你的根本问题是你在使用反射,这是一种很容易被滥用而且很难纠正的先进技术。为什么不传递
goers
[sic-遵循命名约定]而不是Class
对象的实例列表# 2 楼答案
List<Class<? extends goers>>
没有可调用的goers
实例。您只有类,而不是该类的任何实例。没有什么可以调用的您可以尝试实例化这些类,或者首先使用一个
List<goers>
,它允许您调用接口的使用方式