2016-04-08 10 views
0

現在、大量のデータ入力を処理していますが、後で使用するためにgetterで受け取りたい値がたくさんあります。Enum-getterとGetterの比較について

いくつかのメソッドを書いた後、1つのgetメソッドを使用するだけで、可能なすべての値を含む列挙型クラスを使用する方が良いかどうかは疑問でした。

public double getStat(StatType st) { 
    if(st != null) 
     return st.getValue(); 
} 

代わりの

public double getAvgReflection() { 
    return ... 
} 

public double getMaxLifesteal() { 
    return ... 
} 

二つの可能性のいずれかを使用するためのいずれかの規則がありますか? 不満/利点?

ありがとうございます!

答えて

1

あなたが求めている「慣習」は、あなたの価値の使用と定義に沸きます。値Enumを作成するときは、をそのタイプのとして処理する必要があります。つまり、クラス内のフィールドは次のように定義する必要があります。

private MyEnum avgReflection; 
private MyEnum maxLifesteal; 
... 
public MyEnum getAvgReflection { 
    return this.avgReflection; 
} 

など。

ここで、Enumsはdouble値を返すことができますが、これらの値は静的です。私はあなたが静的な値を心配しているとは思っていませんが、代わりに静的な値のセットかもしれません。

あなたは、2つの可能なオプションがあります。配列を使用して、上の2つの制約

public enum MyEnum { 
    averageReflection(0), 
    maximumLifeSteal(1); 
    private int value; 
    private MyEnum(int value) { 
     this.value = value; 
    } 
    public int getValue() { 
     return this.value; 
    } 
} 
... 
private double[] attributes = new double[100]; // arbitrary initialization 
public double getAttribute(MyEnum attribute) { 
    return this.attributes[attribute.getValue()]; 
} 

:すべての値を保持して、インデックスとして列挙型を使用するフィールドとして可能なすべてのパラメータを宣言、または1つの集約フィールドを作成します(プリミティブ値が必要で、パフォーマンスについて懸念していると仮定します)、すべての値が同じ型でなければならず、属性の数はコンパイル時に設定されます。

はまた、あなただけの地図<文字列、ダブル>を使用するか、< MyEnum、ダブル>をマップすること、あるいは< MyEnum、オブジェクト>の地図。マップタイプを使用すると、動的にサイズの設定されたセットを維持したり、複数のタイプを保持することができます(値の変換による高価なオーバーヘッド)。

保持する必要がある属性の量、許容したいオーバーヘッドの種類、およびスタイルに基づいて決定する必要があります。

2

Enumを使用すると、新しい統計情報を追加するのが簡単になります。ちょうどEnumに定数を追加するだけです。 しかし、すべての統計情報は同じように動作する必要があります。つまり、例では2倍になる必要があります。 int statを追加したい場合はどうなりますか?

+0

ありがとうございます!それらはすべて数値であり、すぐに新しいものが追加されることはありません。口語とその他のために、私は別々のゲッターを作るのが良いと思います。 – AscendedKitten

+0

整数は完全に「double」として表現できますので、問題はありません – Moira

関連する問題