【问题标题】:Enum with Strings带字符串的枚举
【发布时间】:2016-06-18 12:06:48
【问题描述】:

这是我的 enmun 课

public enum CSSFont {

    RezeptName("-fx-font: 22 calibri;"),
    RezeptNameClicked("-fx-font: 22 calibri; -fx-underline: true; -fx-text-fill: purple"),
    RezeptTab("-fx-font: 15 calibri;");


    private String font;

    private CSSFont(String s) {
        this.font = s;
    }

    public String getFont() {
        return this.font;
    }
}

如您所见,我创建了一个 getFont() 函数来获取每个 CSSFont 对象的字符串。有没有办法直接在枚举类中创建String对象(我需要JavaFX中setStyle()方法的String),这样我就不必总是写CSSFont.object.getFont()而是CSSFont.object?我试图让 CSSFont 扩展 String,但显然枚举只能实现接口。或者是创建具有静态(最终)字符串属性的类的唯一解决方案?

编辑:谢谢大家,我似乎不太确定什么时候使用枚举,什么时候不使用,因为我只有一个属性(字符串)而且我什至不需要枚举或比较这些枚举对象,我将使用具有静态最终字符串属性的类;)。

【问题讨论】:

  • 看来你真正想要的是一组字符串常量。不是枚举。
  • 只是@Override toString()...因为 enum 常量是隐式的 public static final 标准命名约定适用 - 即 UPPER_UNDERSCORE 而不是 PascalCase
  • @JB Nizet 是的,但枚举不正是这样吗?一组固定的最终属性?单独类中的一组字符串常量也是我上面建议的解决方案,但我更想使用枚举,因为这实际上就是枚举的用途,不是吗?
  • 试试 psf String 放松一下。样板代码将减少 3 倍。
  • 没有。枚举是一个类。它定义了一个类型。它的成员是这个类的实例。它们具有可比性并具有序数。如果你不需要这些特性中的任何一个,而只需要一堆常量字符串,那么定义一堆常量字符串。

标签: java string enums


【解决方案1】:

你可以这样使用:

  public enum MyType {
     ONE {
        public String toString() {
           return "this is one";
     }
    },

     TWO {
       public String toString() {
        return "this is two";
      }
   }
 }

使用以下方法进行测试:

public class EnumTest {
  public static void main(String[] args) {
   System.out.println(MyType.ONE);
   System.out.println(MyType.TWO);
 }
}

原文取自here

【讨论】:

  • other answer。这是相同的建议,并导致相同的问题。但它还有一个额外的缺点,那就是添加了大量的样板代码。
【解决方案2】:

你可以重写 toString 方法:

public enum CSSFont {

    RezeptName("-fx-font: 22 calibri;"),
    RezeptNameClicked("-fx-font: 22 calibri; -fx-underline: true; -fx-text-fill: purple"),
    RezeptTab("-fx-font: 15 calibri;");


    private String font;

    private CSSFont(String s) {
        this.font = s;
    }

    public String getFont() {
        return this.font;
    }

    public String toString(){
        return this.font;
    }
}

那么就可以得到如下字体了:

CSSFont.RezeptName.toString()

【讨论】:

  • 作为OP pointed out,如果方法采用String,这将不起作用。如果 enumString 连接的一部分,则此方法有效。
  • 你必须写 myMethod(CSSFont.VALUE.toString()) 这与 OP 已有的没有什么不同;甚至可能稍微描述性。
  • 是的,在 Oracle API 中,我认为 toString() 方法应该返回枚举对象的名称而不是字符串属性...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多