gpt4 book ai didi

java - 强制子类重写以自身为参数的方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:58 24 4
gpt4 key购买 nike

我有一个抽象事件类,它有一个抽象方法:

abstract boolean intersect(Event object);

此方法应根据特定子类的实例变量检查 Event 子类的两个实例是否相交。我想强制 Event 的任何子类覆盖其实例变量上的方法。设计这个的最佳方法是什么?这是我当前的实现,这是错误的,因为我正在更改参数类型。我也尝试过使用接口(interface),但在类型参数方面遇到了类似的问题。

@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;
}

最佳答案

如果将抽象类设为泛型,则可以允许子类将自身指定为参数类型:

abstract class Event<T extends Event<T>> {
abstract boolean intersect(T object);
}

子类将能够将自己的类型声明为参数。除非您的代码库使用原始类型,否则这应该可行。

class SubClassEvent extends Event<SubClassEvent> {
@Override
boolean intersect(SubClassEvent object){return true;}
}

此限制(或更确切地说是异常(exception))将是原始类型和其他类型事件的事件,这可以允许其他参数类型。

关于java - 强制子类重写以自身为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53148650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com