我有一个抽象的基类,只有一个抽象的方法,我想摆脱它。我想介绍一个带有该方法的新接口,并使所有现有的子类实现该接口,而不是扩展基类。
自:
public abstract class Base {
public abstract Foo getFoo();
}
public class Concrete extends Base {
public Foo getFoo() {
throw new UnsupportedOperationException();
}
}
要:
public interface Base {
Foo getFoo();
}
public class Concrete implements Base {
public Foo getFoo() {
throw new UnsupportedOperationException();
}
}
我试图在没有成功的情况下内联基类,手动创建接口,拉动成员然后删除当时的空基类,但我似乎无法让IntelliJ自动完成此操作。
关于如何解决这个问题的任何建议?
答案 0 :(得分:2)
我现在意识到我设法愚弄自己认为这是一个IDEA问题。相反,它与我尝试在很多泛型引用中内联使用的抽象类型有关,即
final MyMapping<Base, String> = (...)
IDEA无法猜测我想对所有这些通用引用做些什么。这些必须手动解决,除此之外,以下工作。我从以下开始:
public abstract class AbstractSomething {
public abstract void foo();
}
public class ConcreteSomething extends AbstractSomething {
@Override
public void foo() {
throw new UnsupportedOperationException();
}
}
然后我补充说:
public abstract class AbstractSomething implements Something {..}
和alt-enter on Something选择添加该界面。然后我重构 - >拉取成员并确认将抽象方法移动到Something界面,结果是:
public interface Something {
void foo();
}
public abstract class AbstractSomething implements Something {
}
光标在ConcreteSomething中的AbstractSomething上闪烁,ctrl + alt + n到内联超类。 AbstractSomething是一个goner,我留下了
public class ConcreteSomething implements Something {
@Override
public void foo() {
throw new UnsupportedOperationException();
}
}
你必须喜欢这个IDE,它总是比我聪明。
答案 1 :(得分:0)
在超类的名称上键入Alt + Enter,然后调用Convert class to interface。
此快速修复是由“抽象类可能是接口”检查提供的,该检查默认在“不突出显示,仅修复”模式下启用。但是,如果您禁用了它,则需要再次启用它