Kri*_*fer 5 java refactoring intellij-idea
我有一个抽象基类,其中有一个我想删除的抽象方法。我想用该方法引入一个新接口,并使所有现有子类实现该接口而不是扩展基类。
从:
public abstract class Base {
public abstract Foo getFoo();
}
public class Concrete extends Base {
public Foo getFoo() {
throw new UnsupportedOperationException();
}
}
Run Code Online (Sandbox Code Playgroud)
到:
public interface Base {
Foo getFoo();
}
public class Concrete implements Base {
public Foo getFoo() {
throw new UnsupportedOperationException();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试内联基类但没有成功,手动创建接口,拉动成员,然后删除当时空的基类,但我似乎无法让 IntelliJ 自动完成此操作。
关于如何解决这个问题有什么建议吗?
我现在意识到我成功地欺骗了自己,让自己认为这是一个 IDEA 问题。相反,它与我尝试内联的抽象类型有关,在很多泛型引用中使用,即
final MyMapping<Base, String> = (...)
Run Code Online (Sandbox Code Playgroud)
IDEA 无法猜测我想用所有这些通用引用做什么。这些必须手动解决,除此之外,以下内容确实有效。我从以下开始:
public abstract class AbstractSomething {
public abstract void foo();
}
public class ConcreteSomething extends AbstractSomething {
@Override
public void foo() {
throw new UnsupportedOperationException();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我添加:
public abstract class AbstractSomething implements Something {..}
Run Code Online (Sandbox Code Playgroud)
并在 Something 上按 Alt-Enter 键选择添加该界面。然后我重构->拉出成员并确认将抽象方法移动到 Something 接口,结果是:
public interface Something {
void foo();
}
public abstract class AbstractSomething implements Something {
}
Run Code Online (Sandbox Code Playgroud)
当光标在 ConcreteSomething 中的 AbstractSomething 上闪烁时,按 ctrl+alt+n 到内联超类。摘要有些东西已经消失了,我只剩下
public class ConcreteSomething implements Something {
@Override
public void foo() {
throw new UnsupportedOperationException();
}
}
Run Code Online (Sandbox Code Playgroud)
你一定会喜欢这个 IDE,它总是比我聪明。
归档时间: |
|
查看次数: |
3394 次 |
最近记录: |