最終的には、フィールドを無効にする必要があるかどうかを知るために何らかのテストを行う必要があり、boolean
値をテストするため、それを取得する最も簡単な方法boolean
は単純に渡すことです。プリミティブ、オブジェクトなど、あらゆる種類のパラメーターの受け渡しは比較的安価であるため、パフォーマンスに関しては、実際には問題はありません。
設計の観点からは、パラメーターを使用することは理にかなっています。これは実際にboolean
値の目的であり、true か false に関係なく何かを実行することを示すためです。
あなたが思いつく他の解決策は、厄介であるか遅くなり(私はあなたを見ていますThread.currentThread().getStackTrace()
)、何らかの値をテストする必要がありますが、最初にその値を計算する必要があり、時間がかかります.
本当にパラメーターを渡したくない場合は、オブジェクト内で何らかの状態を使用してこれを決定できますが、最終的にはパラメーターではboolean
なくフィールドになるため、実際には、boolean
同じこと。さらに、そのコードを任意の種類の並行システムで実行する場合は、同期を追加する必要があります。これにより、コードをパラメーターとして渡すことで回避できたはずのコードの複雑さがさらに増加します。
簡単に言えば、パラメーターを使用するだけです。それは分別があり、読みやすく、あなたのコードを読んだ人は誰でもあなたが何をしたかをすぐに理解するでしょう。パラメータを渡す必要がないようにするなど、「何かクールなことをする」という理由だけで、コード内であいまいなこと、読みやすさを妨げることなどをしないでください。次のように考えてみてください。あなたが追加したメソッド以外のメソッドから誰かがそのメソッドを呼び出したい場合、呼び出し方を理解するのにどれくらいの時間がかかりますか?
編集:もう1つのオプションはオーバーロードです。いくつかの一般的なデフォルト値のメソッドと、パラメーターを持つメソッドを提供できます。フィールドを無効にするよりも有効にすることが多い場合:
public void showDialog() {
showDialog(true);
}
public void showDialog(boolean fieldEnabled) {
// Show the dialog
}
次に、有効にしてダイアログを開くすべての場所で、最初のメソッド (または を使用して 2 番目のメソッドtrue
) を呼び出しますfalse
。