有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

所有实现类中的java启动方法

我对Java有点陌生,有一个相当简单的问题:

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

public interface Interface_Updatable {

    public void updateViewModel();

}

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

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

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


共 (2) 个答案

  1. # 1 楼答案

    在实现这个接口的所有类上调用这个方法并不容易。问题是,您需要以某种方式跟踪实现该接口的所有类

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

    public void updateViewModels(List<Interface_Updateable> instances) {
        for(var instance : instances) {
            instance.updateViewModel();
        }
    }
    
  2. # 2 楼答案

    缩写形式是:no,没有简单的方法“在实现此接口的类的所有实例上调用此方法”

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

    那么你应该怎么做呢

    实际上,你几乎从来都不想“在所有实例上调用它”,但在应该触发更新的事物和应该触发更新的实例之间,你有某种关系

    例如,方法的命名表明Interface_Updatable的实例与视图模型相关。因此,如果他们“关心”视图模型的更改,他们可以通过执行theViewModel.registerForUpdates(this),视图模型可以保留这样注册的所有对象的列表,然后循环所有实例,并对每个实例调用updateViewModel(当然,在适当的情况下,还需要确保取消注册)

    这是工作中的经典听众模式

    但高层次的答案是:你几乎从来都不想在“所有实例”上调用某个东西,相反,你想调用它的实例彼此之间有某种关系,你需要使这种关系显式(通过上面描述的某种注册机制)