2017-01-17 11 views
0

Javaのenumを理解しようとしていますが、現在質問している質問を説明する記事が見つかりません。インタフェースまたはクラスのJava enum配置

私はPersonインターフェイスとPersonEOクラスを持っています。 Personインタフェースの2つのメソッドはsetGenderとgetGenderです。私は性別を列挙型として保持したいと思います。

インターフェイスで列挙型を作成し、それがクラスに持ち越されるのか、クラスで列挙型にするのですか?

これは現在私が試してきたものですが、クラスに適切に渡す列挙を得ることができず、プログラムを通してどのように流れていくのかを実際に理解していません。

public interface Person{ 
    public enum gender{ 
    Female, 
    Male, 
    Unknown; 

     private String gender; 

     public String getGender(){ 
     } 

     void setGender(){ 
     } 
} 


------------------------------------------------------ 


public class PersonEO implements Person { 
    //Both override methods are not seen as methods from the interface 

    @Override 
    public String getGender() { 
     return gender; 
    } 

    @Override 
    public void setGender() { 
     //Not sure how to set the gender from the enum 
     this.gender = gender; 
    } 
} 

例を示してください。

+0

メンバ変数Genderを作成し、セッタとゲッターで使用します。 – Enzokie

+0

一般的に言えば、あなたのenumタイプにはsetterはありません。 –

+0

'Person.gender'のコード(' Gender'にする必要があります)に空のメソッド 'setGender'が宣言されました。その命名規則は、値を渡すためのメソッド引数がないことを意味します。 'ジェンダー'( 'ジェンダー')の 'setGender'メソッドが何をしようとしていたのかは不明ですが、何を設定するのかは定かではありません。間違ってはいませんが、正確には列挙定数の目的のためにちょっとしたものです。同じ定数が多くのコンテキストで使用されるため、それらは状態を正常に保持すべきではありません。また、人は右中括弧を欠いていた。 –

答えて

6

enum、interface、およびclassはすべて別個の型であり、通常は別々のファイルである必要があります。

enum Gender { 
    MALE, FEMALE, UNKNOWN; 
} 

interface Person { 
    void setGender(Gender gender); 
    Gender getGender(); 
} 

class PersonImpl implements Person { 
    private Gender gender; 

    @Override 
    public void setGender(Gender gender) { 
     this.gender = gender; 
    } 

    @Override 
    public Gender getGender() { 
     return this.gender; 
    } 
} 
+0

私はenumにsetterを持っていません。あなたはインターフェイスを意味しますか? – shmosel

+0

ああ、私は今参照してください!ありがとうございました。私はenumをより多くのクラシファイア/セグメンテーションタイプの代わりに変数として考える。 – bfj5889

+0

私は答えの質問ではなく、そのコードを参照していました。私の間違いは、今修正されました。 –

関連する問題