我試圖重構在以下模式的一些代碼:Eclipse的方法調用重構
// from
object1.foo(object2).bar() ;
// to
fooBar(object1, object2) ;
其中
- object1是父類 的亞型
- 對象2是一個String
- fooBar處於需要導入的公用類中
對於上下文,更改是由於foo()在某些情況下返回null,當調用bar()時導致NullPointerExceptions。
fooBar()首先檢查foo()是否返回null,如果是,則返回默認值,否則調用bar()並返回該值。
我使用Eclipse,我想知道是否有一個好的方法來做到這一點,而不是使用正則表達式在文件搜索或其他方面手動更改每個事件。
編輯 - 響應評論更多信息:
我不擁有控制權的foo()的實現。
關於object1是父類的子類:
//in some cases this happens
SuperClass object1 = new SuperClass(/*whatever*/) ;
//in other cases this happens
ChildClass object1 = new ChildClass (/*whatever*/) ;
不過,我覺得我應該提到它,因爲它可能會影響如何搜索object1。
A [也許]更清晰版的前後代碼之後:
//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 ;
}
您爲每個對象放置一個foo,而對所有對象放置一個foobar?當然減少需要的內存。每個對象至少4個字節。 –
在代碼object1的類型中的某些事件中是SuperClass;在其他情況下,object1的類型顯式爲ChildClass,即SuperType的子類。 – bosticko
你有控制'foo'的實現嗎?讓它永遠不會返回null會更容易 - 而是返回一個默認實例,bar()只返回默認值。 – Dathan