4

在下面的代码中,我试图避免为类的实例分配内存的最后三行。关于如何将内存分配部分带入类定义中的任何建议?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 回答