在创建与C ++的运算符重载等效的API时,我偶然发现了一个奇怪的概念(只是理论上。它实际上不能重载运算符,但可以这样实现)。
我有一个名为Operatable<T>
的接口(它是基于数学的,但这并不重要),该接口将所有运算符都实现为函数(加,减,大于,一元减,增量等)。
只需要执行数学运算(+,-,*,/),其余的默认为其他值。我在实现方括号运算符时遇到问题,因为返回类型取决于子类,并且在编译时无法作为接口知道。我想知道是否有可能使子类以特定类型实现它,或者这在Java中是不可能做到的。
感谢所有帮助!
编辑: 此函数的返回类型不一定与该类本身具有相同的类型,而应将其定义为子类
编辑: 我已经尝试过函数绑定的泛型,但这没有给我预期的结果。
这是ComplexDouble
类中函数的示例:
public class ComplexDouble extends ComplexNumber<Double> implements Operatable<ComplexDouble> {
@Override
public double /*or Double if necessary*/ elementAt (String compName) {
if (compName.contentEquals("real")) return realComp;
if (compName.contentEquals("imaginary")) return imagComp;
throw new NoSuchElementException("The key \"" + compName + "\" is not recognized by " + this.getClass().getCanonicalName());
}
}
这是Operatable<T>
中的替代函数:
public interface Operatable<T> {
public <K> /*return type here*/ elementAt(K key); // the first generic argument for the parameter works, just not for the return type
// with the generic type K the subclass can't specify the type (naturally)
}
编辑: 我不仅要寻求解决方案,而且只是想知道是否有可能。