Java泛型算术

标签 java generics primitive

我正在尝试创建一些 Java 类,它们应该使用 float 或 double (出于模拟目的,我需要同时支持两者)。这些类需要执行一些基本算术运算,还需要使用三角函数(sin、cos、atan2)。

我尝试采用通用方法。由于 Java 不允许泛型中的原始类型和 MyClass<T extends Number>确实允许 Double 和 Float,但使基本算术变得不可能,我围绕 Double 和 Float 构建了一个包装类。但是这种方法失败了,因为我需要在其中一个泛型类中实例化一个值。

是否有任何干净的方法可以同时支持 float 和 double,而无需为每种类型重复所有代码?

最佳答案

也许这就是您要找的?

class MyClass<T extends Number> {
    T add(T t1, T t2) {
        if (t1 instanceof Double) {
            return (T) Double.valueOf((t1.doubleValue() + t2.doubleValue()));
        } else if (t1 instanceof Float) {
            return (T) Float.valueOf(((t1.floatValue() + t2.floatValue())));
        } else if (t1 instanceof Integer) {
            return (T) Integer.valueOf(((t1.intValue() + t2.intValue())));
        }
        // you can add all types or throw an exception
        throw new IllegalArgumentException();
    }

    public static void main(String[] args) {
        MyClass<Double> mc = new MyClass<Double>();
        mc.add(1.0, 1.1);
    }
}

关于Java泛型算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911188/

相关文章:

optimization - Scala "primitive"优化

java - 使用 int 作为 java.util.Dictionary 的类型参数

java - 如何以编程方式将事件添加到 Outlook 日历或 Google 日历?

java - 当键为 `String[]` 时,是否有一种有效的方法来检查存储在 HashMap 中的键是否等于测试键?

java - org.apache.naming.resources 包是否已在 tomcat 8.0.20 中删除?

c# - 这可能是 : c# collection of Type with constrains, 还是通用类型的集合?

delphi - 如何将对象转换为泛型?

c# - 泛型的反射子类

java - 在 try-with-resources block 中调用对象的方法

使用对象和基元的 java 函数