Java:从扩展它的通用列表中调用接口的函数

时间:2016-07-14 22:08:13

标签: java generics arraylist interface

我希望有一个对象列表,这些对象都从包含函数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方法。

2 个答案:

答案 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个对象的实例列表?