我希望有一个对象列表,这些对象都从包含函数go()的同一接口继承。
def median(List):
newlist = []
for num in List:
newlist.append(num)
return newlist
newlist.sort()
if len(newlist) % 2 == 1:
return float(newlist[len(newlist) / 2])
else:
return float((newlist[len(newlist) / 2] + newlist[len(newlist) / 2 + 1])) / 2.0
现在我有3个类都可以实现,为了简单起见,我们只需要将它们称为A,B和C.
在另一个班级,我有public interface goers{
public void go();
}
我想做的事。
List<Class<? extends goers>>
但它不会编译,因为编译器没有从应用于列表中所有成员的接口中获取go方法。
答案 0 :(得分:7)
List<Class<? extends goers>>
没有goers
个实例,您可以在其上调用.go()
。你只有类,而不是那些类的任何实例。没有什么可以打电话给.go()
。
您可以尝试实例化这些类,或者首先使用List<goers>
,这样您就可以调用接口的使用方式。
答案 1 :(得分:2)
由于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
个对象的实例列表?