use*_*929 7 java generics interface
我想创建一个接口,强制实现它的每个类具有某个功能,用于实现的类的类型.
所以说我有类MyClassA,MyClassB,MyClassC等都需要一个自己类型的函数:
在MyClassA中:
public class MyClassA implements MyClass {
MyClassA function(MyClassA x) {
doSomethingImplementedInMyClassA(x);
}
}
Run Code Online (Sandbox Code Playgroud)
在MyClassB中:
public class MyClassB implements MyClass {
MyClassB function(MyClassB x) {
doSomethingImplementedInMyClassB(x);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如何编写接口MyClass以要求这样的功能?
public interface MyClass {
MyClass function(MyClass x);
}
Run Code Online (Sandbox Code Playgroud)
显然不起作用,因为返回类型是MyClass而不是它的实现.如何在Java中正确地做到这一点?
SLa*_*aks 11
你可以使用泛型:
public interface MyClass<V extends MyClass<V>> {
V function(V x);
}
public class MyClassA implements MyClass<MyClassA>
Run Code Online (Sandbox Code Playgroud)
这称为CRTP.
这并不完美; 它仍然会允许这样的事情
public class MyClassB implements MyClass<MyClassA>
Run Code Online (Sandbox Code Playgroud)
要正确地执行此操作,您需要更高级的类型[需要引用],Java不支持.
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |