2017-03-21 5 views
0

私はクラスRatingを取得しています。列挙型の値をすべて内部で返す必要があります。実現できません。enumの値を返しますが、クラスの配列内にあるクラス

public class Rating implements java.io.Serializable { 

    /** 
    * 
    */ 
    private static Rating [] rates; 
    private enum Rates{ 
     Very_Bad, 
     Bad, 
     Mediocre, 
     Good, 
     Very_Good, 
     Excellent;  
    } 

    public static Rating[] values() { 
     // TODO Auto-generated method stub 


     rates = new Rating[Rates.values().length]; 
     rates[0] = Rates.Very_Bad; //Type mismatch: cannot convert from Rating.Rates to Rating 
     rates[1] = Rates.Bad;   //Type mismatch: cannot convert from Rating.Rates to Rating 
     rates[2] = Rates.Mediocre; //Type mismatch: cannot convert from Rating.Rates to Rating 
     rates[3] = Rates.Good;  // Type mismatch: cannot convert from Rating.Rates to Rating 
     rates[4] = Rates.Excellent; //Type mismatch: cannot convert from Rating.Rates to Rating 
     rates[5] = Rates.Excellent; //Type mismatch: cannot convert from Rating.Rates to Rating 
     return rates; 
    } 

} 
+2

あなたは 'Rates []'の代わりに 'Rating []'を書いています。あなたのenumは 'Rates'の対象ですが、あなたはそれらを' Rating'のオブジェクトとして扱っています。 – Gendarme

+2

これは意味をなさない。 'Rating'と' Rates'の間には関係がありません。後者を前者の配列に入れることはできません。すべての 'Rates'の配列を返す場合は' returns Rates.values() 'だけを返します。 – shmosel

答えて

0

私はRatingが列挙さよりも、この意味を理解するための他の方法を見ることができない。

public enum Rating { 
    VERY_BAD, 
    BAD, 
    MEDIOCRE, 
    GOOD, 
    VERY_GOOD, 
    EXCELLENT;  
} 

列挙型のメンバーは、定数のタイプであるため、彼らは通常、すべて大文字で表現されています。

protected static final Rating RATING = Rating.values()[Rating.values().length-1]; 

その後、列挙型の最後の値になります。

この方法では、あなたの教授からのコードは、理にかなっています。 (。values -methodは、それを作成する必要列挙型にネイティブではありません)

編集:

//Representation of the act of rating something 
public class Rating { 
    private Rate rate; 
    private ThingToRate thing; 

    //getters/setters/stuff 

} 

//Possible choices for rating something 
public enum Rate { 
    VERY_BAD, 
    BAD, 
    MEDIOCRE, 
    GOOD, 
    VERY_GOOD, 
    EXCELLENT; 
} 
+0

これは、enumを使用する正しい方法のようには見えません。私は意味がある代わりのアプローチを追加します.. – Tobb

+0

問題は今私はxDだった...それは私のものだった教授のコードではなかった、それはコンストラクタを呼び出す私のコンストラクタだった...助けを感謝私の友人: D –

-1

は、このアプローチを見てください:

private enum Rates { 
    Very_Bad(0), 
    Bad(1), 
    Mediocre(2), 
    Good(3), 
    Very_Good(4), 
    Excellent(5); 

    private final int value; 

    Rates(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 

    public static Rates fromValue(int value) { 
     for (Rates rates : Rates.values()) { 
      if(Objects.equals(rates.getValue(), value)) { 
       return rates; 
      } 
     } 

     throw new IllegalArgumentException("Unknown value: " + value); 
    } 
} 

これは間のマッピングを可能にします値を列挙型キーに変換します。

... 
Rates rate = Rates.fromValue(x); 
... 

これは他のvalueタイプでも動作します。

また、この問題を解決するために工場設計パターンを使用してください。

+0

問題は、Rateの値を持つRatingの配列を返す必要があることです。 –

+0

この点は何ですか?列挙型の使用は、列挙型にマップされる整数を使用するよりも優れています。 – Tobb

+0

ええ、教授は既にテスト(JUnit)を持っており、すべてのメソッドとクラスのコードを実行する必要があります –

関連する問題