我想创建一个接口,强制实现它的每个类对于实现的类的类型具有特定的功能。
假设我有类 MyClassA、MyClassB、MyClassC 等,它们都需要自己类型的函数:
在我的A班:
public class MyClassA implements MyClass {
MyClassA function(MyClassA x) {
doSomethingImplementedInMyClassA(x);
}
}
在我的B类中:
public class MyClassB implements MyClass {
MyClassB function(MyClassB x) {
doSomethingImplementedInMyClassB(x);
}
}
问题是接口怎么写MyClass
需要这样的功能吗?
public interface MyClass {
MyClass function(MyClass x);
}
显然不起作用,因为返回类型是 MyClass 而不是它的实现。如何在 Java 中正确地做到这一点?
您可以使用泛型:
public interface MyClass<V extends MyClass<V>> {
V function(V x);
}
public class MyClassA implements MyClass<MyClassA>
这被称为CRTP http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern.
这并不完美;它仍然允许类似的事情
public class MyClassB implements MyClass<MyClassA>
To do this correctly, you need higher-kinded types [citation needed], which Java does not support.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)