-2

setAssetWeightメソッドを使用してArrayListに格納されているオブジェクトの値を設定すると、オブジェクトのすべてのインスタンスで、ArrayListsの値がsetAssetWeightで設定された値に変更されます。

private List<Asset> assetList = new ArrayList<Asset>();
private int fitness;

public Portfolio(){    
}

public void setAssetWeight(int i, int weight){
    this.assetList.get(i).setWeight(weight);
}

例:2つのPortfolioオブジェクト、pf1とpf2を作成する場合は、次のようにします。

pf1.setAssetWeight(0, 10);

pf2に含まれるアセットのウェイトを印刷すると、最初のアセットのウェイトがデフォルトの0ではなく10であると表示されます。

他のオブジェクトを使用してメソッドを呼び出すと、オブジェクトの1つのインスタンスのArrayListの値が変更されるのはなぜですか?ArrayListはプライベートとして宣言されていますが、これは、ArrayListが属するオブジェクトによってのみ変更できることを意味するのではないでしょうか。

Portfolio1 pf1 = new Portfolio1();
Portfolio1 pf2 = new Portfolio1();

pf1.add(0, assetList.get(0));
pf1.add(1, assetList.get(1));
pf1.add(2, assetList.get(2));

pf1.setAssetWeight(0, 10);

System.out.println(pf2.toString());

これは、テストに使用しているコードのセクションです。この例では、pf2ではなくpf1にのみ重みを設定しているにもかかわらず、printステートメントはAssetListの最初のアセットの重みが10であることを出力します。

public void add(Asset asset){
    this.assetList.add(asset);
}

これは、アセットをリストに追加するために使用されるコードです。

4

1 に答える 1

1

再現できません。間違いなく、両方のインスタンスで同じAssetインスタンスをList<Asset>に追加しています。

于 2013-02-22T01:23:09.663 に答える