4

以下のコードでは、クラスのインスタンスにメモリを割り当てる最後の3行を避けようとしています。クラス定義内にメモリ割り当て部分を含める方法に関する提案はありますか?だから私がやりたいのは、pInfo[0].sValue="string";すぐに実行できるようにすることですAClass [] pInfo = new AClass[10];

  class AClass {
     private String sName="";
     private String sValue="";
  }

    AClass [] pInfo = new AClass[10];

   // how to avoid the code below or bring them into class definition?  

    pInfo[0] = new AClass();
    pInfo[1] = new AClass();
      ... 
    pInfo[9] = new AClass();

編集:私が効率とは、コードの量とコードの読みやすさを意味します

4

4 に答える 4

7
AClass[] pInfo = {new AClass(),new AClass(), etc.};

また

AClass[] pInfo = new AClass[10];

for(int i = 0; i < pInfo.length; i++)  
{  
    pInfo[i] = new AClass();  
}  
于 2012-07-31T20:17:50.933 に答える
1

次のようなことを試すことができます:

class AClass {
     public String sName="";
     public String sValue="";
}

class AClassArray {
     public AClass[] pInfo;

     public AClassArray() {
        pInfo = new AClass[10];
        for(int i = 0; i < pInfo.length; i++)  
           pInfo[i] = new AClass();  
     }
}

使用する:

AClassArray aClassArray = new AclassArray();
aClassArray.pInfo[i].sXXXX;
于 2012-07-31T20:19:43.950 に答える
1

これを回避する方法はありません。配列の各要素に値を明示的に割り当てる必要があります。

JLS §10.3 では、配列は作成時に要素の初期値を提供すると述べています。

JLS §4.12.5は、参照型の初期値は であると述べていますnull

于 2012-07-31T20:20:41.023 に答える
0
class AClass {
   private String sName="";
   private String sValue="";

   public static final AClass[] getArrayOfObjs(int size){
    if(size <= 0)
       return null; //You can also create your custom exception to be thrown here
    AClass[] array = new AClass[size];

    for(int i = 0; i < size; i++)  
    {  
       array[i] = new AClass();  
    }  
    return array;
  }
}

次に、としてインスタンス化します

AClass [] pInfo = AClass.getArrayOfObjs(10);
于 2012-07-31T20:23:06.620 に答える