Java:在具有不同返回类型的驱动类中重写方法?

Java:在具有不同返回类型的驱动类中重写方法?,java,programming-languages,overloading,Java,Programming Languages,Overloading,在下面的java代码中,NetBeans抱怨是否有@Override语句。 如果不存在覆盖,我会得到一个错误,返回类型Pair和Pair不兼容。解释器建议我添加一个@Override语句。但是,@Override语句也会出现同样的错误 消除这个错误的最好方法是什么?我希望调用方不必将返回的对象强制转换为正确的类 public class Interval { private Date left; private Date right; public Pair<In

在下面的java代码中,NetBeans抱怨是否有@Override语句。 如果不存在覆盖,我会得到一个错误,返回类型
Pair
Pair
不兼容。解释器建议我添加一个@Override语句。但是,@Override语句也会出现同样的错误

消除这个错误的最好方法是什么?我希望调用方不必将返回的对象强制转换为正确的类

public class Interval {
    private Date left;
    private Date right;

    public Pair<Interval, Interval> split(Date dt){
        ...
        return new Pair<Interval, Interval>(
                        new Interval(left, dt),
                        new Interval(dt, right));
    }
}

public class ExtendedInterval extends Interval {
    private Data localData;

    @Override
    public Pair<ExtendedInterval, ExtendedInterval> split(Date dt){
        Pair<Interval, Interval> baseInterval = super.split(dt);
        return new Pair<ExtendedInterval, ExtendedInterval>(
                              new ExtendedInterval(localData, baseInterval.first()),
                              new ExtendedInterval(localData, baseInterval.second()));
    } 
}
公共类间隔{
私人约会离开;
私人约会权;
公共对拆分(日期dt){
...
归还新的一对(
新间隔(左,dt),
新区间(dt,右));
}
}
公共类ExtendedInterval扩展了Interval{
私有数据本地数据;
@凌驾
公共对拆分(日期dt){
对基址间隔=超级分割(dt);
归还新的一对(
新的ExtendedInterval(localData,baseInterval.first()),
新的ExtendedInterval(localData,baseInterval.second());
} 
}

您可以将基类方法更改为:

public Pair<? extends Interval, ? extends Interval> split(Date dt)
从编译器的角度来看,这看起来不错,但您不太可能在
对上调用
setFirst(Interval)


现在,即使实际上没有
setFirst
方法,所有这些都适用——因为您不能告诉Java编译器
类型本身是协变的;通用差异是在使用类型时完成的。

这是一个很好的解决方案。我看到的唯一的缺点是收集调用super的结果<代码>Pair@Colin:是的,这是一个公平的观点。。。不幸的是,我不确定是否需要对此采取任何措施:(
Interval x = new ExtendedInterval();
Pair<Interval, Interval> pair = x.split(new Date());
pair.setFirst(new Interval());