2013-02-28 98 views
5

我想知道任何人都可以帮助我提供双精度和浮点精度的选项吗?专门为双精度和浮点精度的java类

我正在使用Java3D和Point3d和Point3f的API规范,我的理解是实现有效地复制Point3f类,在必要时用double替换float。这是因为泛型不能用于原始数据类型?效率?

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

+1

请参阅http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types获取相关信息 – djechlin 2013-02-28 17:44:09

+1

如果您同时使用这两个选项,请只写两个选项。 – 2013-02-28 17:46:30

+1

还需要指出的是,这显然是不成熟的优化。只需使用双。 – djechlin 2013-02-28 18:08:24

回答

5

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

虽然你可以做代码生成,从一个模板生成多个java文件。

Java 8将引入许多功能接口的专用原始版本,如IntFunction。这将是非常丑陋的。

+0

感谢您的帮助。非常感激。 – felice 2013-03-01 13:49:29

1

我认为这里主要关注的是性能。通用类型参数必须是Object的子类型,那么通用实现应使用DoubleFloat包装(因为原始类型不适用于通用机制)。

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

+0

谢谢你。正如你所建议的,Curve需要执行许多计算。 – felice 2013-03-01 13:48:07