2013-02-28 146 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