次のパターンでコードをリファクタリングしようとしています。
// from
object1.foo(object2).bar() ;
// to
fooBar(object1, object2) ;
どこ
- object1 は SuperClass のサブタイプです
- object2 は文字列です
- fooBar は、インポートする必要があるユーティリティ クラスにあります
文脈上、この変更は、場合によっては foo() が null を返すためであり、bar() が呼び出されたときに NullPointerExceptions が発生します。
fooBar() は最初に foo() によって null が返されるかどうかをチェックし、そうであればデフォルト値を返し、そうでなければ bar() を呼び出してそれを返します。
私はEclipseを使用していますが、ファイル検索などで正規表現を使用してすべての出現を手動で変更する代わりに、これを行う良い方法があるかどうか疑問に思っています.
編集 - コメントに応じた詳細情報:
foo() の実装を制御することはできません。
object1 が SuperClass のサブクラスであることについて:
//in some cases this happens
SuperClass object1 = new SuperClass(/*whatever*/) ;
//in other cases this happens
ChildClass object1 = new ChildClass (/*whatever*/) ;
object1 の検索方法に影響する可能性があるため、言及する必要があります。
[多分]前後のコードのより明確なバージョン:
//before
Object result = object1.foo("a string").bar() ;
//NullPointerException if foo() returns null! :(
//after
Object result = fooBar(object1, "a string") ;
一方、別のユーティリティ クラスには、次のものがあります。
public static Object fooBar(SuperClass obj, String str) {
Object result = DEFAULT_RESULT ;
if (obj != null && str != null && obj.fooAble(str)) {
result = obj.foo(str).bar() ;
}
return result ;
}