5

我想知道有人可以帮我提供一个类的双精度和浮点精度选项吗?

我正在使用 Java3D,并且根据 Point3d 和 Point3f 的 API 规范,据我了解,该实现有效地复制了 Point3f 类,在必要时将 float 替换为 double。这是因为泛型不能与原始数据类型一起使用吗?效率?

我正在编写一个 Curve 类,我想知道我是否应该以类似的方式提供 Curved 和 Curvef 。这是最好的选择吗?

4

2 回答 2

5

是的,不幸的是,Java 泛型不适用于原始类型。

不过,您可以进行代码生成,从一个模板生成多个 java 文件。

Java 8 将引入许多专门的函数式接口的原始版本,例如IntFunction. 它会非常难看。

于 2013-02-28T17:47:01.593 回答
1

我认为这里主要关注的是性能。泛型类型参数必须是 的子类型Object,然后泛型实现应该使用DoubleFloat包装器(因为泛型机制无法使用原始类型)。

在这种情况下,每个实例Curve都会实例化多个对象,每个对象对应一个 double/float 值。实际值将由方法调用读取,例如doubleValue()floatValue()。此外,由于原始包装器是不可变的,因此涉及包装器的任何操作的结果都必须存储在新实例中。这似乎不可接受,因为Curve可能会用于繁重的计算。

于 2013-02-28T18:05:09.240 回答