【问题标题】:Private ArrayList shared by all members in class类中所有成员共享的私有 ArrayList
【发布时间】:2013-02-22 00:43:03
【问题描述】:

当我使用 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);
}

例如:如果我创建了两个 Portfolio 对象,pf1 和 pf2,那么就这样做

pf1.setAssetWeight(0, 10);

当我打印 pf2 中包含的资产的权重时,它将显示第一个资产的权重为 10,而不是默认的 0。

为什么当我使用另一个对象调用方法时,该对象的一个​​实例的 ArrayList 中的值会发生变化? ArrayList被声明为private,是不是只能被它所属的对象修改?

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());

这是我用来测试的代码部分,在这个例子中,打印语句将打印出 AssetList 中的第一个资产的权重为 10,即使我只设置了 pf1 的权重,而不是 pf2。

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

这是用于将资产添加到列表的代码。

【问题讨论】:

  • 您的问题是什么?这只是一堆陈述。
  • 已编辑以包含我的问题,对此感到抱歉
  • 发布您的完整代码,包括打印语句
  • 请同时发布创建和添加元素到这些列表的代码。我的猜测是您在两个列表中使用了相同的 Asset 元素。即使列表不同,如果两者都包含相同的元素,则更改将反映在所有出现的地方。
  • 使用的assetList包含不同的Assets,但是对于每个Portfolio来说,这些assets都是一样的,唯一的区别应该是每个asset的权重,当我为一个portfolio改变一个asset的权重时,每个投资组合中资产的权重变化

标签: java class arraylist private


【解决方案1】:

无法复制。毫无疑问,您在两个实例中都将相同的 Asset 实例添加到 List 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多