Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带字符串的枚举_Java_String_Enums - Fatal编程技术网

Java 带字符串的枚举

Java 带字符串的枚举,java,string,enums,Java,String,Enums,这是我的英语课 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

这是我的英语课

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对象的字符串。有没有一种方法可以直接在enum类中创建字符串对象(我需要JavaFX中
setStyle()
方法的字符串),这样我就不必总是编写
CSSFont.object.getFont()
,而是编写
CSSFont.object
?我试图让CSSFont扩展字符串,但很明显,枚举只能实现接口。还是创建具有静态(最终)字符串属性的类的唯一解决方案


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

您可以覆盖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()


您可以使用以下内容:

  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);
 }
}

最初取自

,您实际需要的似乎是一组字符串常量。不是enum。只需重写toString()。。。另外,由于
enum
常量隐式地
public static final
标准命名约定适用,即
上下划线
而不是
PascalCase
@JB是的,但enum不正是这样吗?一组固定的最终属性?在一个单独的类中设置一组字符串常量也是我上面建议的解决方案,但我更想使用enumn,因为enum就是为了这个而存在的,不是吗?试试psf字符串并放松一下。这将比样板少3倍。不。枚举是一个类。它定义了一个类型。其成员是此类的实例。它们具有可比性,并具有序号。如果您不需要这些特性中的任何一个,而只需要一组常量字符串,请定义一组常量字符串。就像方法采用
字符串一样,这将不起作用。如果
enum
是串接的一部分,例如,
String
串接。您必须编写
myMethod(CSSFont.VALUE.toString())
,这与OP已有的方法没有什么不同;也许更不具描述性。是的,在Oracle API中,我认为toString()方法应该返回枚举对象的名称,而不是字符串属性……请参阅。这是同样的建议,并导致同样的问题。但它还有一个额外的缺点,那就是添加了大量的样板代码。