使用常量

时间:2015-12-27 12:26:22

标签: 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
}

进入这样一个类:

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
}

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

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

注意:当然有人会做出改变的原因是偏离主题,请避免在这个帖子中讨论它。

2 个答案:

答案 0 :(得分: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

你已经完成了。

答案 1 :(得分:1)

作为@RC。说,看起来目前没有这样的重构功能。

我最终使用multicursors并按照建议手动输入内容。