すべてのBigDecimal計算に「グローバル精度」を設定する方法はありますか?
いいえ。
MathContext
追加の属性としてを含むラッパークラスを作成する必要があります。次のことが必要になります。
(バリエーションとして、静的を使用して「グローバル」を実装できますがMathContext
、それでも、が使用されるようにラッパーを使用する必要がありますmc
。)
(拡張BigDecimal
も機能します。これは、ラッパークラスよりも優れていると言えます。)
あなたはコメントでこれを言いました:
私は本当に自分のDecimalモジュールを書きたくありません。BigDecimalがなぜそれほど非協力的であるのかを理解したいだけです。
(設計に関する質問には、設計チームのみが明確に回答できます。ただし...)
すべての複雑なユーティリティクラスと同様に、BigDecimalの設計は、幅広いユースケースの要件を満たすように設計された妥協案です。これは、「強力さ」と「シンプルさ」という競合するメタ要件(間違った言葉)の間の妥協点でもあります。
あなたが持っているのは、特に十分にサポートされていないユースケースです。しかし、それが十分にサポートされている場合(たとえば、MathContext
すべてをグローバルに制御したり、MathContext
それぞれに接続したりする場合BigDecimal
)、他のあらゆる種類の複雑さが生じると思います。たとえば、考慮すべき2つ以上の競合するコンテキストオブジェクトがある操作を処理します。このような問題は対処できますが、プログラマーにとって「驚き」につながる可能性があり、それは良いことではありません。
MathContext
現在のアプローチは単純で理解しやすいものであり、より複雑なものが必要な場合は、それを実装できます...それを必要とする操作にを明示的に指定することによって。