假设我有一个界面:
public interface Foo{
String bar(int baz);
}
现在在一些 Java 代码中我有一个该接口(interface)的匿名实现:
Foo foo = new Foo(){
public String bar(int baz){
return String.valueOf(baz);
}
};
有没有一种方法(在 Eclipse 中)将其重构为枚举单例模式(Effective Java,第 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;
这种重构手工完成很乏味,我一直都在做。有没有插件可以做到这一点?还是我不知道的 secret JDT 技巧(我正在使用 Indigo)?
顺便说一句:Idea 或 NetBeans 是否支持这种重构?
最佳答案
没有办法。
顺便说一句,做这样的事情会更常见:
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)
等
也许向枚举添加一个私有(private)字段以协助方法的实现,通过(私有(private))构造函数设置。
关于java - Eclipse中如何将匿名接口(interface)实现重构为Enum Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093730/