【问题标题】:Starting method in all implemented classes所有实现的类中的启动方法
【发布时间】:2021-11-03 14:44:56
【问题描述】:

我是 Java 新手,有一个相当简单的问题:

我有一个接口,有一个方法:

public interface Interface_Updatable {

    public void updateViewModel();

}

我在几个类中实现了这个接口。那么每个类当然都有那个方法updateViewModel

编辑:我在主函数中实例化这些类。这里我需要为所有实现该接口的对象调用updateViewModel 的代码。

有没有一种简单的方法可以结合起来?我不想分别从每个对象实例调用每个方法并保持更新。从长远来看,保持更新可能会导致错误。

【问题讨论】:

  • 什么时候开始?在哪里?它是如何知道实例的?
  • @SotiriosDelimanolis:我怀疑你问的正是 OP 不清楚的问题 ;-)
  • 你需要从实现接口的类中构造实例,没有实例你不能调用方法
  • 好吧,我现在正在使用 AndroidStudio。主类实例化其他类。在主类中,在某些时候,我希望所有实例都使用更新方法......但我不想单独调用每个对象的每个更新方法,因为我有很多类。

标签: java interface


【解决方案1】:

简写为:no,没有简单的方法可以“在所有实现此接口的类实例上调用此方法”。

至少不是以一种理智和可维护的方式。

那么你应该怎么做呢?

实际上,您几乎不想只“在所有实例上调用它”,但是您在应该触发更新的事物和应该触发更新的实例之间存在某种关系 .

例如,方法的命名表明Interface_Updatable 的实例与视图模型相关。因此,如果他们“关心”视图模型的更改,他们可以通过执行theViewModel.registerForUpdates(this) 之类的操作将自己注册为感兴趣方,视图模型可以保留所有像这样注册的对象的列表,然后循环遍历所有实例并在每个实例上调用 updateViewModel(当然,需要确保在适当的情况下也发生注销)。

这是经典的侦听器模式。

但高级别的答案是:您几乎从不想在“所有实例”上调用某些东西,而是您想要调用它的实例彼此之间存在某种关系,您需要使这种关系显式(通过类似上述的某种注册机制)。

【讨论】:

    【解决方案2】:

    没有简单的方法可以在所有实现此接口的类上调用此方法。问题是您需要以某种方式跟踪实现此接口的所有类。

    一种可能的面向对象的方法是将包含对象的列表传递给函数,这些对象是实现Interface_Updateable 接口的类的实例,然后对该列表中的每个对象调用updateViewModel

    public void updateViewModels(List<Interface_Updateable> instances) {
        for(var instance : instances) {
            instance.updateViewModel();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2015-12-05
      相关资源
      最近更新 更多