我想知道有人可以帮我提供一个类的双精度和浮点精度选项吗?
我正在使用 Java3D,并且根据 Point3d 和 Point3f 的 API 规范,据我了解,该实现有效地复制了 Point3f 类,在必要时将 float 替换为 double。这是因为泛型不能与原始数据类型一起使用吗?效率?
我正在编写一个 Curve 类,我想知道我是否应该以类似的方式提供 Curved 和 Curvef 。这是最好的选择吗?
我想知道有人可以帮我提供一个类的双精度和浮点精度选项吗?
我正在使用 Java3D,并且根据 Point3d 和 Point3f 的 API 规范,据我了解,该实现有效地复制了 Point3f 类,在必要时将 float 替换为 double。这是因为泛型不能与原始数据类型一起使用吗?效率?
我正在编写一个 Curve 类,我想知道我是否应该以类似的方式提供 Curved 和 Curvef 。这是最好的选择吗?
是的,不幸的是,Java 泛型不适用于原始类型。
不过,您可以进行代码生成,从一个模板生成多个 java 文件。
Java 8 将引入许多专门的函数式接口的原始版本,例如IntFunction
. 它会非常难看。
我认为这里主要关注的是性能。泛型类型参数必须是 的子类型Object
,然后泛型实现应该使用Double
和Float
包装器(因为泛型机制无法使用原始类型)。
在这种情况下,每个实例Curve
都会实例化多个对象,每个对象对应一个 double/float 值。实际值将由方法调用读取,例如doubleValue()
和floatValue()
。此外,由于原始包装器是不可变的,因此涉及包装器的任何操作的结果都必须存储在新实例中。这似乎不可接受,因为Curve
可能会用于繁重的计算。