2016-08-29 8 views
-2
public enum Numbers{ 
    One { 
     public String getDigit(){ 
      return "1"; 
     } 
    } 
     , 

    Two { 
     public String getDigit(){ 
      return "2"; 
     } 
    } 
     , 
    Three { 
     public String getDigit(){ 
      return "3"; 
     } 
    } 

}; 

public static void main (String[] args) throws java.lang.Exception 
{ 
    Numbers xyz = Numbers.One; 
    System.out.println(xyz.getDigit()); 
} 

は、エラーがスローされます。このエラーの原因であるJavaでこのようにenumを使用すると何が問題になりますか?上記のコード

Main.java:38: error: cannot find symbol 
     System.out.println(xyz.getDigit()); 

何?そして、各定数の列挙型の中でメソッドを宣言するための正しい使い方は何ですか?

答えて

2

あなたはなく、列挙型Numbers自体に、列挙型に定数OneTwoThreeの方法getDigit()のみを定義しています。

xyz.getNumbers()をメインメソッドと同じようにするには、そのメソッドもenumクラス自体に入れる必要があります。 abstractのままにすることができます。

そこにもそれを定義します。もちろん

public enum Numbers{ 
    One { 
     @Override 
     public String getDigit(){ 
      return "1"; 
     } 
    }, 
    Two { 
     @Override 
     public String getDigit(){ 
      return "2"; 
     } 
    }, 
    Three { 
     @Override 
     public String getDigit(){ 
      return "3"; 
     } 
    }; 

    // Define the `getDigit()` method on the level of the enum itself too! 
    public abstract String getDigit(); 
}; 

をあなたの非常に簡単な例では、それは次のように列挙Numbersで完全にそれを実装すると良いでしょう:

public enum Numbers { 
    One("1"), Two("2"), Three("3"); 

    private String digit; 

    Numbers(String digit) { this.digit = digit; } 

    public String getDigit() { return digit; } 
} 

が、あなたのロジックが複雑な場合、あなたはenumインスタンス自体のメソッドをオーバーライドできます。

+0

enumレベルでメソッドを定義することは必須です。私はNumber.One.getDigit()を列挙型レベルで定義せずに呼び出し、このエラーをスローします:シンボルを見つけることができません \t \t System.out.println(Numbers.One.getDigit()); – sorenl

+0

@ sorenlそうです。私は私の答えを更新しました。 –

関連する問題