为 Eclipse 中的函数参数确定适当的父类型
Determine appropriate parent type for function argument in eclipse
我的代码看起来像这样(重构的一部分)
void doSomething( DerivedType v ) {
v.foo();
v.bar();
...
}
public static class DerivedType extends Parent1 {
@Override void foo() { ... }
}
public static class Parent1 extends Parent2 {
public void foo() {...}
public void bar() {...}
}
public static class Parent2 {
public void bar() { ... }
}
在这种情况下,doSomething
的函数签名过于严格。它只会接受 DerivedType
,即使它只使用 Parent1
.
中可用的功能
改变似乎是明智的
void doSomething(DerivedType v){
...
}
到
void doSomething(Parent1 v){
...
}
一切都应该仍然有效,因为 doSomething
只使用 Parent1
中定义的函数。在调用 doSomething
的地方甚至不需要任何更改。
请注意,它无法更改为 void doSomething(Parent2 v){...}
,因为 v.foo
在 Parent2
中不存在。
eclipse 有没有办法告诉我 doSomething
的参数类型可以从 DeriedType
更改为 Parent1
?
在这种情况下很明显,但实际上,doSomething
有几百行长,DerivedType
的类型层次结构要深得多,会引入多个接口 - 所以一个快速的方法可以为我节省很多时间。 (可能不需要我把这个问题打出来,但是学习很重要;))
原来超级简单。
- 光标在所需参数上,
- Alt+Shift+T,(重构菜单)
- "Generalize Declared Type"。
然后您可以从列表中 select Parent1
。
我的代码看起来像这样(重构的一部分)
void doSomething( DerivedType v ) {
v.foo();
v.bar();
...
}
public static class DerivedType extends Parent1 {
@Override void foo() { ... }
}
public static class Parent1 extends Parent2 {
public void foo() {...}
public void bar() {...}
}
public static class Parent2 {
public void bar() { ... }
}
在这种情况下,doSomething
的函数签名过于严格。它只会接受 DerivedType
,即使它只使用 Parent1
.
改变似乎是明智的
void doSomething(DerivedType v){
...
}
到
void doSomething(Parent1 v){
...
}
一切都应该仍然有效,因为 doSomething
只使用 Parent1
中定义的函数。在调用 doSomething
的地方甚至不需要任何更改。
请注意,它无法更改为 void doSomething(Parent2 v){...}
,因为 v.foo
在 Parent2
中不存在。
eclipse 有没有办法告诉我 doSomething
的参数类型可以从 DeriedType
更改为 Parent1
?
在这种情况下很明显,但实际上,doSomething
有几百行长,DerivedType
的类型层次结构要深得多,会引入多个接口 - 所以一个快速的方法可以为我节省很多时间。 (可能不需要我把这个问题打出来,但是学习很重要;))
原来超级简单。
- 光标在所需参数上,
- Alt+Shift+T,(重构菜单)
- "Generalize Declared Type"。
然后您可以从列表中 select Parent1
。