Java 中的内部接口重载

Overloading inside interface in Java

我需要在我的项目中为 Observers 实现各种 update 方法,以使用特定类型重载 Object 参数。所以不要使用

public void update (Observable o, Object arg0){
   if(arg0 instanceof Class1) ....
   else if (arg0 instanceof Class2) ....

或开关(这是一种非常 'C' 的工作方式),我想使用 扩展 Observerinterface并重载 update 方法,像这样

public interface ExtendedObserver extends Observer{
   public void update (Observable obj, Class1 cls);
   public void update (Observable obj, Class2 cls);
}

然后将它实现到我的观察者中。每个不同的观察者都会使用特定的更新方法。

我想知道这是否是一种正确的工作方式,因为

  1. 我认为在接口中重载方法是不正确的
  2. 我仍然必须在实现接口的每个 class 中添加 unused 更新方法。
  • 接口内部方法重载没有问题
  • 接口是实现 classes 所必需的契约 实施。如果您不希望 classes 实现该方法。 也不需要在接口中包含它。
  • 因此,您可以仅在需要的地方在 class 中编写该重载方法。或者使抽象 class 实现接口并在其中编写重载方法。
  • 这样你就不会结束向其他人公开不必要的方法契约classes

您可以尝试将接口更改为抽象 class 并在那里实现这两个方法。另外,考虑使用泛型。

如果控制Class1Class2,最好改成这样:

interface Updatable {
    void doUpdate(Observable obj);
}

class Class1 implements Updatable {
    ...
    void doUpdate(Observable obj) { /*class1-specific code*/ }
}

class Class2 implements Updatable {
    ...
    void doUpdate(Observable obj) { /*class2-specific code*/ }
}

这样你的主要更新方法将是这样的:

public void update (Observable o, Updatable arg0){
    arg0.doUpdate(o);
}

我认为这不是实现接口的正确方法。接口是 Class 的特定特征 (Scala)。因此,如果只有一个参数类型在变化,我建议使用 bounded Type Parameters

public interface ExtendedObserver<T> extends Observer{
    public void update (Observable obj, T cls);
}

如果这对您没有帮助,我建议您将 Class-特定方法外包到他们自己的接口中。