另一个类与main方法中的变量进行交互

时间:2013-09-14 06:18:11

标签: java methods scope private final

我有一个创建List<Long>的主方法。然后我有另一个类,其状态是List<Long> - 这个类的目标是将main方法的List<Long>作为其状态并对其进行操作而不影响main方法的List<Long>

然而,我面临的问题是,这个其他类会影响 其状态(private List<Long>以及 {{1}在主要方法中。

如何调整我的代码,使List<Long>只能影响其类的状态?

setTesting(...)

3 个答案:

答案 0 :(得分:1)

由于您的类中的testing引用是指您在main方法中创建的相同列表,因此进行任何更改都将更改主方法列表。如果您想使用setTesting方法中传递的列表创建新列表,请执行以下操作:

   public void setTesting(List<Long> list) {
        this.testing = new ArrayList<Long>(list);
    }

使用new中的setTesting关键字,将使用输入列表创建新列表。对此新列表的任何更改都不会影响原始主方法列表。

您也可以从类级别删除测试列表的初始化,只需声明它:

private List<Long> testing;

答案 1 :(得分:1)

制作防御性副本。

public void setTesting(List<Long> list) {
     this.testing = new ArrayList<Long>(list);
    }

目前的问题是您的Test对象和main方法都引用了相同的列表。因此,如果有人修改了列表,则其他人会看到它。解决方案就是为它们提供不同的副本。

提醒一句:上面的解决方案也会在新列表中复制相同的引用,但这里并不重要。

答案 2 :(得分:1)

这是因为只有一个List<Long>。在main方法中,您将其传递到课程setTesting中的Test,但您只需存储对{{1}中创建的列表的引用}}。请记住,在Java中,变量是引用到对象 - 它们本身不是对象。如果您使用main,就像使用=方法一样,您只是复制对列表的引用,而不是创建列表的副本。如果您希望setTesting对象拥有自己的副本,则您必须自己复制列表:

Test