【发布时间】:2008-09-30 17:01:15
【问题描述】:
我想要一个实现接口的类,将特定的子类指定为参数。
public abstract Task implements TaskStatus<Task> {
TaskStatus<T> listener;
protected complete() {
// ugly, unsafe cast
callback.complete((T) this);
}
}
public interface TaskStatus<T> {
public void complete(T task);
}
但我想保证所使用的类型参数是扩展该类的特定类的类型,而不只是任务或。
所以我想出的最好的是:
public abstract Task<T extends Task> implements TaskStatus<T> {
}
你可以通过写来扩展它:
public class MyTask extends Task<MyTask> {
}
但这也是有效的:
public class MyTask extends Task<SomeOtherTask> {
}
并且回调的调用将因 ClassCastException 而爆炸。那么,这种方法是错误的和被破坏的,还是有一种我错过的正确方法?
【问题讨论】:
标签: java generics design-patterns