java - Eclipse中如何将匿名接口(interface)实现重构为Enum Singleton

标签 java eclipse interface enums refactoring

假设我有一个界面:

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/

相关文章:

java - Swagger 引用对 Spring 对象的响应,使用 Swagger 进行分页

java - 如何确定在运行时调用了哪个类的 `main` 方法?

eclipse - 如何在包资源管理器中隐藏 "Maven Dependencies"

r - 有人在 R 中实现 Eureqa 的接口(interface)吗?

c# - 不是按名称而是按类型指定接口(interface)成员

java - Mockito 使用 Mockito.mockStatic() 模拟静态 void 方法

java - Eclipse:如何使用外部 jar 构建可执行 jar?

eclipse - 类型字符串不可见

java - 如何启动 aicas license provider ?并使用 jamaicaVM 调用文件?

c++ - 在 C++ 中为抽象类模板创建接口(interface)