2011-06-23 9 views
0

配列の初期化を使わずに、クラス内のオブジェクトの配列を動的に埋めることができるかどうかを判断しようとしています。私は本当に行ごとに配列を埋めることを避けるためにしたいと思います。私はここにあるコードを考えればこれは可能ですか?Java:動的に塗りつぶしの配列(ベクトル/ ArrayListではない)

final class Attributes { 

    private final int TOTAL_ATTRIBUTES = 7; 

    Attribute agility; 
    Attribute endurance; 
    Attribute intelligence; 
    Attribute intuition; 
    Attribute luck; 
    Attribute speed; 
    Attribute strength; 

    private Attributes[] attributes; //array to hold objects 

    private boolean initialized = false; 

    public Attributes() { 
     initializeAttributes(); 
     initialized = true; 

     store(); //method for storing objects once they've been initialized. 

    } 

    private void initializeAttributes() { 
     if (initialized == false) { 
      agility = new Agility(); 
      endurance = new Endurance(); 
      intelligence = new Intelligence(); 
      intuition = new Intuition(); 
      luck = new Luck(); 
      speed = new Speed(); 
      strength = new Strength(); 
     } 
    } 

    private void store() { 
     //Dynamically fill "attributes" array here, without filling each element line by line. 
    } 
} 
+0

はい、あなただけ明確にするためにリフレクション – adarshr

+0

を使用することができます..「あなたは、すべてのメンバ変数が配列に属性を入力した追加したいです?」これはあなたが動的なrtの意味ですか? – Dileep

+0

私はあなたが* Java Collectionで既に実装されているものを実装したいと思っています。あなたはOpenJDKを見て、彼らがどのようにしたのか見ることができます。 –

答えて

-1

あなたはFYIあなたはArrayListに物事を追加することができ、またHashMap<String,Attribute>

+0

この場合、HashMapはどのように役立ちますか? – zeboidlund

+0

他にも誰もがコードサンプルを持っていますが、おそらく1つでも投げてもかまいません – demongolem

+0

これは本当にコメントですが、質問に対する回答ではありません。著者にフィードバックを残すには、「コメントを追加」を使用してください。 –

0
Field[] fields = getClass().getDeclaredFields(); 
ArrayList<Attrubute> attributesList = new ArrayList<Attrubute>(); 
for(Field f : fields) 
{ 
    if(f.getType() == Attrubute.class) 
    { 
     attributesList.add((Attrubute) f.get(this)); 
    } 
} 
attributes = attributesList.toArray(new Attrubute[0]); 
+1

Reflectionはここで問題を "解決"しますが、ここでは設計上の問題が起きやすいでしょう:)そして、 'getDeclaredFields'を使用すると、非公開フィールドに対してよりうまく動作するかもしれません。 – mihi

+0

@mihiデザインにコメントすることはできませんが、 'getDeclaredFields()'を使うのは意味があります。 –

+0

私が理解できないことは1つだけです。なぜArrayListではなく値を転送するために配列を使用していますか? – zeboidlund

2
attributes = new Attributes[sizeOfInput]; 

for (int i=0; i<sizeOfInput; i++) { 
    attributes[i] = itemList[i]; 
} 

を使用して、オブジェクトの配列を取得するためのtoArray()を呼び出すことができます。

1

短い配列の初期化構文があります:

attributes = new Attribute[]{luck,speed,strength,etc}; 
+0

ええ、私はそれについて考えていましたが、もっとダイナミックなものを探しています。 – zeboidlund

関連する問題