Nic*_*cea 13 java generics inheritance casting type-parameter
我有一个抽象的Event类,它有一个抽象的方法:
abstract boolean intersect(Event object);
Run Code Online (Sandbox Code Playgroud)
此方法应检查Event子类的两个实例是否基于特定子类的实例变量相交.我想强制Event的任何子类覆盖其实例变量的方法.设计这个的最佳方法是什么?这是我当前的实现,因为我正在更改参数类型,这是错误的.我也尝试过使用接口,但是遇到了类型参数的类似问题.
@Override
public boolean intersect(SubClassEvent e2) {
boolean intersects = false;
if(this.weekDay == e2.weekDay) {
if (this.getStartTime() < e2.getStartTime() && this.getEndTime() > e2.getStartTime()) {
intersects = true;
}
else if(this.getStartTime() >= e2.getStartTime() && this.getStartTime() < e2.getEndTime()){
intersects = true;
}
}
return intersects;
}
Run Code Online (Sandbox Code Playgroud)
ern*_*t_k 11
如果使抽象类具有通用性,则可以允许子类将自己指定为参数类型:
abstract class Event<T extends Event<T>> {
abstract boolean intersect(T object);
}
Run Code Online (Sandbox Code Playgroud)
子类将能够声明自己的类型作为参数.除非您的代码库使用原始类型,否则这应该有效.
class SubClassEvent extends Event<SubClassEvent> {
@Override
boolean intersect(SubClassEvent object){return true;}
}
Run Code Online (Sandbox Code Playgroud)
此限制(或更确切地说是此例外)将是其他类型事件的原始类型和事件,这些事件可以允许其他参数类型.