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

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

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

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

  • 问题内容: 有没有办法找到泛型的类类型? 以上内容绝对无法编译。 问题答案: 泛型是编译时功能。泛型在编译时添加检查,这在运行时可能没有任何意义。这是一个例子。您只能检查所引用对象的类型,它可能是代码中的超级类型。如果要传递类型T,则必须明确地执行此操作。 要么 注意:类型可能不相同,

  • 我正在尝试使用泛型修改代码,以避免所有重复的代码。 我有一个类DBBaseClass,它将被其他一些类扩展。我正在尝试创建一个getAll方法,该方法返回存储在数据库中的子类的所有对象。 我有错误:-无法实例化类型T-类型T不是泛型;它不能用参数参数化 我如何在这里实例化我的T子类?? 有什么诀窍?? 谢谢 编辑: 为了更详细地解释我的目标:我有两个类SUbClassA和SubClassB,它们扩