java - 我的方法如何接受任何类型的 Number 作为方法参数? (Java 泛型)

标签 java generics

我的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/

相关文章:

java - 将 Java 方法调用链接和对象构造转换为普通的 Clojure

java - 使用volley上传视频

linq - 在 PowerShell 中调用静态通用 LINQ 扩展方法

arrays - 在通用和惯用的 Swift 中递归计算多维数组中的项目

c# - 将 Point3D 列表转换为坐标数组

java - 是否可以为 Java Webstart 应用程序创建高级登录对话框?

java - java源码最终是如何与文件交互的?

java - Java 哈希表单向链表的空指针异常

c# - C# 中的字典数据序列化

java - var<T> 在 Java 中做什么?