我正在尝试按照以下模式重构一些代码:
// 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 ;
}