2016-06-18 4 views
0

Это мой enmun классEnum со строками

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 в классе enum (мне нужен String для методов setStyle() в JavaFX), так что мне не нужно всегда писать CSSFont.object.getFont(), а скорее CSSFont.object? Я попытался позволить CSSFont расширять String, но, очевидно, перечисления могут реализовывать только интерфейсы. Или это единственное решение для создания класса со статическими (конечными) атрибутами String?

EDIT: Спасибо всем, кажется, я не был уверен, когда использовать перечисления, а когда нет, так как у меня есть только один атрибут (String), и мне даже не нужно перечислять или сравнивать эти объекты перечисления, Я буду использовать класс со статическими конечными строковыми атрибутами;).

+2

кажется, что вы на самом деле хотите, представляет собой набор констант String. Не указано. –

+1

Просто '@Override toString()' ... P.S. поскольку константы enum' неявно подразумевают стандартные соглашения об именовании «public static final» - например, «UPPER_UNDERSCORE», а не 'PascalCase'. –

+0

@JB Nizet да, но это не переименование именно это? Фиксированный набор конечных атрибутов? Множество строковых констант в отдельном классе было также моим предложенным решением выше, но я скорее хотел использовать enumn, потому что на самом деле это перечисление, не так ли? – New2HTML

ответ

-1

Вы можете переопределить метод 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()

+0

Как указал [OP] (https://stackoverflow.com/users/2852865/new2html), если метод принимает 'String', это не сработает. Это работает, если 'enum' является частью, например, конкатенации String. –

+0

Я тестировал, он работает – ThiepLV

+3

Вы должны написать 'myMethod (CSSFont.VALUE.toString())', который ничем не отличается от того, что OP уже имеет; может быть, даже немного _less_ описательным. –

0

Вы можете использовать что-то вроде этого :

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

+0

См. [Другой ответ] (http: // stackoverflow. ком/а/37896838/+2071828). Это одно и то же предложение и приводит к тем же проблемам. Но у него есть дополнительный недостаток - добавление огромного количества шаблонов. –