8
Javaでのinstanceofの回避
「instanceof」操作のチェーンを持つことは「コードのにおい」と見なされます。標準的な答えは「多態性の使用」です。この場合、どうすればよいですか? 基本クラスにはいくつかのサブクラスがあります。それらのどれも私の制御下にありません。同様の状況は、JavaクラスInteger、Double、BigDecimalなどです。 if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);} else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);} else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);} NumberStuffなどを制御できます。 数行で十分なコード行を使いたくありません。(時々、HashMapマッピングInteger.classをIntegerStuffのインスタンスに、BigDecimal.classをBigDecimalStuffのインスタンスに、などを作成します。しかし、今日はもっと単純なものが必要です。) 私はこれと同じくらい簡単なものが欲しい: public static handle(Integer num) { ... } public static handle(BigDecimal num) { ... } しかし、Javaはそのようには機能しません。 フォーマット時に静的メソッドを使用したいのですが。私がフォーマットしているものは複合であり、Thing1にはThing2の配列を含めることができ、Thing2にはThing1の配列を含めることができます。次のようにフォーマッタを実装すると問題が発生しました。 class Thing1Formatter { private static Thing2Formatter thing2Formatter = new Thing2Formatter(); public format(Thing …