5

クラスの倍精度と浮動小数点の両方の精度のオプションを提供するのを手伝ってくれる人はいますか?

私は Java3D を使用しており、Point3d および Point3f の API 仕様から、必要に応じて float を double に置き換える実装が Point3f クラスを効果的に複製することを理解しています。これは、プリミティブ データ型で Generics を使用できないためですか? 効率?

私は Curve クラスを作成していますが、Curved と Curvef を同様の方法で提供する必要があるかどうか疑問に思っています。これは最良の選択肢ですか?

4

2 に答える 2

5

はい、残念ながら Java ジェネリックはプリミティブ型では機能しません。

ただし、1 つのテンプレートから複数の Java ファイルを生成して、コードを生成することはできます。

Java 8 では、IntFunction. かなり醜くなります。

于 2013-02-28T17:47:01.593 に答える
1

ここでの主な関心事はパフォーマンスだと思います。ジェネリック型パラメーターは のサブタイプである必要がありObject、その場合、ジェネリック実装ではDoubleおよびFloatラッパーを使用する必要があります (プリミティブ型はジェネリック メカニズムで使用できないため)。

この場合、 のすべてのインスタンスは、Curvedouble/float 値ごとに 1 つずつ、複数のオブジェクトをインスタンス化します。doubleValue()実際の値は、やなどのメソッド呼び出しによって読み取られますfloatValue()。さらに、プリミティブ ラッパーは不変であるため、ラッパーを含む操作の結果は新しいインスタンスに格納する必要があります。Curve重い計算で使用される可能性が高いため、これは受け入れられないようです。

于 2013-02-28T18:05:09.240 に答える