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' 的工作方式),我想使用 扩展 Observer
的 interface
并重载 update
方法,像这样
public interface ExtendedObserver extends Observer{
public void update (Observable obj, Class1 cls);
public void update (Observable obj, Class2 cls);
}
然后将它实现到我的观察者中。每个不同的观察者都会使用特定的更新方法。
我想知道这是否是一种正确的工作方式,因为
- 我认为在接口中重载方法是不正确的
- 我仍然必须在实现接口的每个 class 中添加 unused 更新方法。
- 接口内部方法重载没有问题
- 接口是实现 classes 所必需的契约
实施。如果您不希望 classes 实现该方法。
也不需要在接口中包含它。
- 因此,您可以仅在需要的地方在 class 中编写该重载方法。或者使抽象 class 实现接口并在其中编写重载方法。
- 这样你就不会结束向其他人公开不必要的方法契约classes
您可以尝试将接口更改为抽象 class 并在那里实现这两个方法。另外,考虑使用泛型。
如果控制Class1
和Class2
,最好改成这样:
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-特定方法外包到他们自己的接口中。
我需要在我的项目中为 Observers
实现各种 update
方法,以使用特定类型重载 Object 参数。所以不要使用
public void update (Observable o, Object arg0){
if(arg0 instanceof Class1) ....
else if (arg0 instanceof Class2) ....
或开关(这是一种非常 'C' 的工作方式),我想使用 扩展 Observer
的 interface
并重载 update
方法,像这样
public interface ExtendedObserver extends Observer{
public void update (Observable obj, Class1 cls);
public void update (Observable obj, Class2 cls);
}
然后将它实现到我的观察者中。每个不同的观察者都会使用特定的更新方法。
我想知道这是否是一种正确的工作方式,因为
- 我认为在接口中重载方法是不正确的
- 我仍然必须在实现接口的每个 class 中添加 unused 更新方法。
- 接口内部方法重载没有问题
- 接口是实现 classes 所必需的契约 实施。如果您不希望 classes 实现该方法。 也不需要在接口中包含它。
- 因此,您可以仅在需要的地方在 class 中编写该重载方法。或者使抽象 class 实现接口并在其中编写重载方法。
- 这样你就不会结束向其他人公开不必要的方法契约classes
您可以尝试将接口更改为抽象 class 并在那里实现这两个方法。另外,考虑使用泛型。
如果控制Class1
和Class2
,最好改成这样:
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-特定方法外包到他们自己的接口中。