1

Javaでオブジェクトの2次元配列の値を設定する方法.

以下は私のforループです:

Object[][] hexgenSecurityInferenceData = null;
for (String methodName: knowGoodMap.keySet()) {
    hexgenSecurityInferenceData = new Object[][] {
        {
            (KnownGoodInfoRO) knowGoodMap.get(methodName), new Object[] {
                (MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)
            }
        },
    };
}

これにより、1 行のデータのみが出力されます。私は間違いを犯すと確信していますadding values to Array of Object but really don't know how to fix.

これを修正するのを手伝ってください

4

3 に答える 3

4

配列に要素を追加することはできません。配列に要素を設定することしかできません。

List<Object[]>代わりに次のものを用意することをお勧めします。

List<Object[]> hexgenSecurityInferenceData = new ArrayList<Object[]>();
for (String methodName:knowGoodMap.keySet()) {
    hexgenSecurityInferenceData.add(new Object[] {
        knowGoodMap.get(methodName),
        new Object[] {
            methodPropertiesMap.get(methodName),
            methodParametersMap.get(methodName)
        }
     });
 }

(キャストは無意味だったので削除しました...Object[]とにかく値を保存しています。キャストの唯一の利点は、オブジェクトが予期しないタイプの場合に例外を引き起こすことです。)

本当に必要な場合は引き続き配列を使用できますが、最初に適切なサイズで配列を作成し、「現在のインデックス」を保持する必要があります。とにかく、リストよりも配列を使用する方が一般的に難しいです。

本当に配列が必要な場合は、リストから作成できます。

Object[][] array = hexgenSecurityInferenceData.toArray(new Object[0][]);

このように 2 段階で行うと、事前に配列に直接入力するよりも簡単になります。

実際には、さらに2つの変更を提案します。

  • これだけに使用しないでくださいObject[]...このデータをカプセル化する型を作成してください。Object[]現在のアプローチでは、内部にネストされています...このデータを読み取るObject[]コードは恐ろしいものになります。
  • entrySet()の代わりに使用するとkeySet()、キーで値をフェッチする必要がなくなります
于 2013-05-15T05:53:37.003 に答える
1

オブジェクトのマトリックスがあるObject[][]ため、この 2 次元配列にデータを入力する場合は、次のようにする必要があります。

Object[][] hexgenSecurityInferenceData=new Object[10][10];
for(int i=0; i<10;i++){
   for(int j=0; j<10;j++){
        hexgenSecurityInferenceData[i][j] = new Object();
   }
}

しかし、ジョンが指摘したように、使用する代わりに独自の実装/カプセル化を行う方が良いObject

于 2013-05-15T05:54:29.477 に答える
1

これを解決するには、を使用Listするのが最善の方法です。object[]ただし、配列を初期化することで使用できます。

Object[][] hexgenSecurityInferenceData = new Object[knowGoodMap.keySet().size()][];
int i = 0;
for (String methodName : knowGoodMap.keySet()) 
{
  hexgenSecurityInferenceData[i][0] = new Object[][]
  {
     {(KnownGoodInfoRO) knowGoodMap.get(methodName), 
         new Object[]{(MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)}
     }
  };
   i++;
 }
于 2013-05-15T06:07:41.670 に答える