如何在Java中专注于`this`以外的参数

问题描述 投票:0回答:1

考虑以下示例:

abstract class Numeric {
    abstract public Numeric add(Numeric other);
}
class Real extends Numeric {
     private double inner;

     public Real add(Real other) {
          return this.inner + other.inner;
     }
}

我能够专注于返回类型(毫无疑问是由于协方差),但编译器(可以理解)仍然会产生错误,因为我对

add
的实现仅用于
Real
不足以支持
Numeric
'更广泛的合同。

有没有一种方法可以在超类(例如Numeric

)中表达
,实现者可以专门研究
this
以外的参数,而不使用泛型(因为它们对我的进行正交声明,除非您只考虑纯静态方法)?

java inheritance
1个回答
3
投票

我认为这是仿制药的工作:

public abstract class Numeric<N extends Numeric<N>> {
    public abstract N add(N other);
}

我意识到通用语法令人困惑。 我熟悉它的唯一原因是 java.lang.Enum 使用它。 这是完全有效、正常、正确的。

然后你可以像这样使用它:

public class Real
extends Numeric<Real> {
    private double inner;

    public Real(double value) {
        this.inner = value;
    }

    @Override
    public Real add(Real other) {
         return new Real(this.inner + other.inner);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.