使用常量将枚举转换为类

Jof*_*rey 7 java intellij-idea

是否有IntelliJ重构允许自动将枚举转换为类,从而将其枚举值转换为static final字段?

我似乎无法找到任何关于它的东西,我只找到关于提取常量但不是我正在寻找的东西.

我正在寻找的例子

例如,我想像这样一个枚举:

public enum Planet {

    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters

    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    // getters here
}
Run Code Online (Sandbox Code Playgroud)

进入这样一个类:

public class Planet {
    public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
    public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);    
    public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);    
    public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);    
    public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);    
    public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);    
    public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);    
    public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms    
    private final double radius; // in meters

    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    // getters here
}
Run Code Online (Sandbox Code Playgroud)

如果你想知道为什么有人想这样做......

  • 如果枚举首先不应该是一个枚举(无论出于何种原因,有人宣称它是这样的)
  • 使它扩展另一个类
  • 从数据库中获取枚举值而不是在声明中对它们进行硬编码(尽管我必须承认在这种情况下我们只需要删除所有枚举值并将enum关键字更改为class,不需要这么复杂的重构)

注意:当然有人会进行更改的原因是偏离主题,请避免在此主题中讨论它.

maw*_*ker 3

我找不到它的链接。但是有人/一直在谈论 Java 9 或 10 的枚举类不是从该类继承的Enum(其中所有“枚举”都是“只是自动隐藏地扩展 Enum 的类”(不是引用,而是一种简单的思考方式。 ))。从而允许extends正常工作。我认为 Java 8 甚至对此进行了讨论,但由于寻找更坚如磐石的实现而被搁置了。的 lambda 等

因此,如果将来您可以扩展枚举,我不会感到惊讶。


编辑:

(以为这是在这里,但没有注意我上次的编辑。)

我已经完成了这件事,只是使用了 Notepad++、Kate、Eclipse(无论我当时使用什么编辑器)中的“替换”功能,或者使用了 gnu 的 awk 命令来进行字符串操作。(这样的操作我已经做过很多次了,手段多种多样)一旦你学会了一些基本的正则表达式,像这样操作字符串文件就相当容易了。

例如,您可以替换(如果在 IDE/编辑器中,则在顶行的“仅选择”内)

1)<tab or 3/4 spaces>public static final Planet

2)(= new Planet(

3)将单词enum改为class

你就完成了。