从抽象类的所有子类调用方法的最佳方法是什么?

时间:2013-07-05 14:44:38

标签: java foreach abstract-class

我想对一堆不同的API服务进行API调用。我有一个名为ApiService的抽象类,它包含每个子类的公共方法。每个新API都必须继承并实现这些方法。

我的问题是:我如何浏览ApiService的所有子类并调用他们的方法?

现在,我已经实例化了所有服务的静态数组(这意味着必须手动将新服务添加到数组中),如下所示:

ApiService[] services = {new SubService1(), new SubService2(), ...};

我想知道是否有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:1)

您想要在抽象类的每个子类实例上调用一个方法。无论如何都没有自动查找类的所有实例的方法,因此您需要自己管理所有实例的列表。

您必须执行以下操作之一:

  • 手动管理列表,即在创建列表时将实例添加到列表中
  • 通过将实例添加到基类ApiService的构造函数中的静态列表,使其更加自动化。但它让基类知道它的实例列表,在我看来有点代码味道。

当您事先知道应用程序中的实例数时,还有另一种选择:使用Enum而不是抽象类。每个Enum值都是类的一个实例,它可以实现接口和方法,每个实例都可以以不同方式覆盖方法。