假设我有一个界面:
public interface Foo{
String bar(int baz);
}
现在在一些Java代码中,我有一个匿名的接口实现:
Foo foo = new Foo(){
public String bar(int baz){
return String.valueOf(baz);
}
};
有没有办法(在Eclipse中)将它重构为枚举单例模式(Effective Java,Item 3),如下所示:
// further up in the same Compilation Unit:
enum StandardFoo implements Foo{
INSTANCE{
public String bar(int baz){
return String.valueOf(baz);
}
}
}
// ...
Foo foo = StandardFoo.INSTANCE;
这种重构手工操作很繁琐,而且我一直这样做。有没有插件可以做到这一点?或者我不知道的秘密JDT技巧(我正在使用Indigo)?
BTW:Idea或NetBeans是否支持这种重构?
答案 0 :(得分:2)
没有办法。
顺便说一下,做这样的事情会更常见:enum StandardFoo implements Foo {
INSTANCE1(0),
INSTANCE2(5);
private final int delta;
private StandardFoo(int delta) {
this.delta = delta;
}
public String bar(int baz) {
// Simple example to demonstrate using fields in enum methods
return String.valueOf(baz + delta);
}
}
即使它们被定义为“INSTANCE1(0)”,你仍然可以将它们称为代码中的“INSTANCE1”;即StandardFoo.INSTANCE1.bar(123)
等
也许在枚举中添加一个私有字段来协助实现该方法,通过(私有)构造函数设置。
答案 1 :(得分:2)
重构“将匿名类转换为嵌套”是诀窍的一部分。您必须将类更改为枚举,并用枚举单例替换ctor调用。
答案 2 :(得分:1)
IDEA支持Structural Search and Replace(教程),我相信可以为您加快速度。