这是我希望能够做的一个例子(在Java中):
interface MyInterface<E> {
public void doSomething(E foo);
}
class MyClass implements MyInterface<ClassA>, MyInterface<ClassB> {
public void doSomething(ClassA fooA) {
...
}
public void doSomething(ClassB fooB) {
...
}
}
当我尝试实现它时,编译器告诉我我只能MyInterface
在MyClass
. 我曾假设MyInterface<ClassA>
与 相比,它被视为不同的类型MyInterface<ClassB>
,但显然不是。这似乎非常有用,所以我对这个错误感到惊讶。
更新:感谢到目前为止的帮助。正如其中一条评论指出的那样,以上内容是抽象的;我要解决的问题是以这样一种方式实现观察者模式,即观察者类通过它实现的接口声明它观察到的那些类,并处理它在特定于类的方法中观察到的对象的变化。使用这种方法的优点是,从接口可以清楚地看出一个类实现了它所观察到的对象类型,因此编译器强制程序员显式地实现对所观察类实例的更改的处理。因此,上面的抽象代码实际上可能类似于以下内容:
interface IsObserverOf<E> {
public void observedDidChange(E foo);
}
class MyClass implements IsObserverOf<Database>, IsObserverOf<Spreadsheet> {
public void observedDidChange(Database database) {
...
}
public void observedDidChange(Spreadsheet spreadsheet) {
...
}
}
在这里,MyClass 声明它观察 Database 对象和 Spreadsheet 对象,并且编译器将(在理想情况下)要求必须实现两个不同的 observedDidChange() 方法。
谢谢。