我的CustomNumber类扩展了Number类(实现了所有方法,但这里没有列出)。该类有一个除法方法,其工作原理如下:我可以给它任何类型的 Number 参数,并且总是得到没有精度损失的计算。这就是为什么我正在考虑双重值(value)观。但在这种情况下,除了双对象之外,我无法使用其他任何东西来调用此方法。我怎样才能使这个方法,或者整个类 100% 通用?
public class CustomNumber<T> extends java.lang.Number {
java.lang.Number value;
public CustomNumber(java.lang.Number value) {
this.value = value;
}
public static CustomNumber<Double> division(Number a, Number b) {
return new CustomNumber<>(a.doubleValue() / b.doubleValue());
}
}
最佳答案
在这方面,Java 是极其烦人的。
他们教条地禁止运算符重载(尽管 Scala 有),因此您被迫将 /
编码为名为 divide
或类似的方法,等等。
有关更多细节,请参阅如何实现任意精度库(例如 BigInteger
),并以此为基础构建您的解决方案。
Java 的一个优点是,您可能会使用 BigDecimal 并完全放弃您的想法。尽管用它执行复杂的数学运算时最终得到的代码实际上是不可读的。 (出于这个原因,我求助于将 C++ 与 JNI 结合使用)。
关于java - 我的方法如何接受任何类型的 Number 作为方法参数? (Java 泛型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766091/