假设我正在编写一些类来执行简单的数学运算,并且我有一个抽象类 JNumber
,其中包含一个用于添加另一个数字的方法:
public abstract class JNumber
{
public abstract JNumber add(JNumber addend);
// etc.
}
add
的返回值表示 this
与参数 addend
的总和。
现在假设我有一个 JNumber
的抽象子类(称为 JFieldElement
),其中包含一个除法方法(我不能在 JNumber
类,例如,因为你不能除整数)。
public abstract class JFieldElement
extends JNumber
{
public abstract JFieldElement div(JFieldElement divisor);
}
现在假设我正在编写一个过程,它将获取某个扩展 JFieldElement
的类的实例 x,y,z 并计算如下表达式:
x/(y + z)
我可以尝试:
JNumber w = y.add(z);
JNumber result = x.div(w);
但是,如果这样做,我会收到错误 - 由于 add
的返回类型是 JNumber
,我们必须将 w
声明为一个JNumber
。但是我们不能将函数 div
应用于它,因为该函数需要接收 JFieldElement
。
如果有某种方法可以指定 add
函数应始终返回与调用它的任何类相同类型的值,那么这将起作用。有办法做到这一点吗?
最佳答案
我认为泛型应该在这里发挥作用:
public abstract class JNumber<N extends JNumber<N>>
{
public abstract N add(N addend);
// etc.
}
关于java - 有什么方法可以指定抽象类中方法的返回值应该与包含类具有相同的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539945/