我有以下情况:
abstract class X { abstract X someMethod (...) {...} }.
Run Code Online (Sandbox Code Playgroud)
现在我想约束X的任何实现,让它的'someMethod'方法返回特定的实现类型,而不仅仅是X:
class X1 extends X { X1 someMethod (...) {...} }.
class X1 extends X { X someMethod (...) {...} }. //want this to be flagged as an error
class X2 extends X { X1 someMethod (...) {...} }. //want this to be flagged as an error too
Run Code Online (Sandbox Code Playgroud)
是否有可能使用Java泛型实现这一点?
编辑
好的.我只问了是/否问题并得到了"是".我的错.我真正感兴趣的是"我如何编写声明".
Bjö*_*örn 18
这也有效;
abstract class X<T> {
public abstract T yourMethod();
}
class X1 extends X<X1> {
public X1 yourMethod() {
return this;
}
}
class X2 extends X<X2> {
public X2 yourMethod() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
abstract class X<I extends X<I>> {
protected X(Class<I> implClazz) {
if (!getClass().equals(implClazz)) {
throw new IllegalArgumentException();
}
}
abstract I someMethod();
}
Run Code Online (Sandbox Code Playgroud)
基本原理:您不能在类型边界中引用动态类型,因此需要在构造函数中进行间接检查。
| 归档时间: |
|
| 查看次数: |
12044 次 |
| 最近记录: |