当前位置: 首页 > 知识库问答 >
问题:

Java通用算法

唐俊楚
2023-03-14

我正在尝试创建一些Java类,这些类可以使用浮点数或双倍数(出于模拟目的,我需要同时支持这两种类型)。这些类需要做一些基本的算术运算,还需要使用三角函数(sin、cos、atan2)。

我尝试了一种通用的方法。因为Java不允许在泛型和MyClass中使用基元类型

有没有干净的方法可以支持float和double,而不必复制每种类型的所有代码?


共有2个答案

胡越
2023-03-14

根据经验,如果您在Java中进行核心的数值计算工作,最好坚持使用基本类型。这意味着泛型对于这种类型的工作来说是不可能的(但当然,对于许多其他用途来说,泛型是完美的)。

有没有干净的方法可以支持float和double,而不必复制每种类型的所有代码

您可以根据高精度方法实施低精度方法:

public static double calc(double x, double y) {
   // do the calculation and return double
}

public static float calc(float x, float y) {
   return (float)calc((double)x, (double)y);
}
阚英武
2023-03-14

也许这就是你要找的?

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);
    }
}
 类似资料:
  • 🕒 8.12 时长:20min 1.自我介绍 2.问了一些基本情况 3.针对简历讲一个自己熟悉的项目,然后问了几个问题 4.面试官介绍部门情况 反问 1.base地 2.后续流程:技术面会有两面,第一面是项目经理面,通过后会领导技术面,说是要准备PPT介绍项目。

  • 之前就听说蔚来笔试选择可能考的很广,所以上来先做的编程,现在来看真是无比正确 两道coding,感觉都还好 第一道感觉是看懂题就能做。。算最简单的位运算?但最后通过93.33,到最后也没想明白为啥 第二题是并查集,感觉套路也挺经典的 至于选择就有点抽象了。。Python,sql,深度学习/机器学习。。我是真都不会啊 看来是又寄了一家

  • 问题内容: 我正在尝试实现通用稀疏矩阵加法问题中提到的加法 我返回新Integer的行出现编译器错误。我不确定我缺少什么,因为T扩展了Number并且Integer是Number的子类。 问题答案: 编译器不允许您执行此操作,因为可能是其他一些类,例如。 您知道这是通过检查获得的,但是编译器却没有。

  • 有人能告诉我用两种不同的方法调用同一个函数的区别,以及编译器在这两种情况下到底做了什么;比如:

  • 问题内容: 我正在学习Java泛型,我问自己这个问题。 这两个方法声明之间有什么区别? 和 问题答案: 在后者中,您可以引用范围内的类型,即。在前者中,您不需要。