2016-10-21 44 views
1

以下の構造を持つenumクラスから設定しようとしているオブジェクトがJavaにあります。JavaでEnum値の空の文字列を設定する

public enum Code { 
    CODE_A, 
    CODE_B, 
    CODE_C, 
    CODE_D, 
    CODE_E, 
    CODE_F, 
    EMPTY("") 
} 

空白の値にオブジェクトを設定したいとします。すなわち Object.setCode(Code.EMPTY)

そして、私は私のオブジェクトを見たとき、それはプロパティコードの値として代わりにEMPTY「」を持っている必要があります。

誰かが私が使用できる回避策を提案できますか?私は以下の通りですObject.setCodeセッターを変更する必要はありません:

public void setCode(Code code) { 
    this.code = code; 
} 

また問題が

+1

enum 'Code'のtoStringメソッドをオーバーライドします – Blip

+1

' Code'のどのメソッドが呼び出されますか?それが 'toString()'の場合は、それをオーバーライドできます。それが 'name()'の場合、空の文字列を変更できるとは思いません。 –

+0

前のコメントで指摘したように、 'Code' Enumをどのように呼び出すのですか? ComboBoxなどの項目としてUIで呼び出されますか? – Blip

答えて

2

「STRING_A」
とCode.EMPTYは「」を返します実行している

1

これを試してみてくださいObject.setCode(のみオブジェクトコードタイプのMustBe)です。

そして

System.out.println("CODE_A=" + Code.CODE_A); 
System.out.println("EMPTY=" + Code.EMPTY); 

結果:

CODE_A=CODE_A 
EMPTY= 
1

あなたは、文字列値に列挙値を設定したいですか? 互換性がないため動作しません。これを試してみてください:

public class Main { 
    public static class Code { 
     public static final String CODE_A = "A"; 
     public static final String CODE_B = "B"; 
     public static final String CODE_C = "C"; 
     public static final String EMPTY = ""; 
    } 

    private String Code; 

    public void setCode (String code){ 
     this.code = code; 
    } 

} 

は、あなたが今言った場合:「メイン」インスタンスの

setCode (Main.Code.EMPTY); 

あなたの変数「コード」が空の文字列になります。

Code.EMPTYを呼び出すと、そうCode.CODE_Aが返されます実行しているEMPTY「

enum Code{ 

    CODE_A("STRING_A"), 
    CODE_B("STRING_B"), 
    EMPTY(""); 

    // Assigning a value to each enum 
    private final String code; 
    Code(String code){ 
     this.code = code; 
    } 

    // Overriding toString() method to return "" instead of "EMPTY" 
    @Override 
    public String toString(){ 
     return this.code; 
    } 

} 

「の代わりに」」値を返すようにするには、単に各列挙型に値を割り当てると、toString()メソッドをオーバーライドすることができます

+0

私はそこに50以上の列挙定数を持っている、それらのすべてを作るストリングdoesntは私に非常に良いアプローチを見える – CodeMonkey

0

EMPTYから空の文字列パラメータを削除し、このようtoStringをオーバーライドしてみてください。

public enum Code { 
    CODE_A, 
    CODE_B, 
    CODE_C, 
    CODE_D, 
    CODE_E, 
    CODE_F, 
    EMPTY 

    @Override 
    public String toString() { 
     return this == EMPTY ? "" : this.name(); 
    } 
} 

も参照してください。Enum.name()を参照してください。

関連する問題