0

假设一个类有一个 ArrayList 属性:

private ArrayList<Object> objects;

是否有可能为这个属性设置一个 setter / mutator 方法,如下所示:

public void setObjects(ArrayList<Object> objects) {
     this.objects = objects;
}

还是因为 Java 的处理方式,您必须做一些更复杂的事情?

我尝试使用以下两个类自己进行测试:

测试.java

import java.util.*;

public class Test {

    private ArrayList<String> strings;

    public Test() {
        strings = new ArrayList<String>();
    }

    public ArrayList<String> getStrings() {
        return this.strings;
    }

    public void setStrings(ArrayList<String> strings) {
        this.strings = strings;
    }
}

测试测试.java

import java.util.*;

public class testTest {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<String>();

        strings.add("One");
        strings.add("Two");
        strings.add("Three");

        Test test = new Test();
        test.setStrings(strings);

        System.out.println("First get() of index 0: "+test.getStrings().get(0));
        System.out.println("Modifying test's strings object...");

        test.getStrings().set(0, "1");

        System.out.println("First get() of index 0: "+test.getStrings().get(0));
        System.out.println("Change it back... using strings variable");

        test.setStrings(strings);

        System.out.println("First get() of index 0: "+test.getStrings().get(0));
    }
}

输出

索引 0 的第一个 get():一个

修改测试的字符串对象...

索引 0 的第一个 get():1

改回来...使用字符串变量

索引 0 的第一个 get():1

最后一个打印语句应该显示第一个索引是 "One" 。

那么,有什么想法可以实现我的初衷吗?

4

2 回答 2

1

尝试

public void setStrings(ArrayList<String> strings) {
    // clear it if you want a fresh list
    this.strings.clear();

    this.strings.addAll(strings);
}

输出:

First get() of index 0: One
Modifying test's strings object...
First get() of index 0: 1
Change it back... using strings variable
First get() of index 0: One

如果您不想引用相同的内容,请ArrayList使用addAll()方法。

于 2014-04-27T20:07:47.960 回答
1

您在以下行中更改字符串数组:

test.getStrings().set(0, "1");

所以你不能指望这条线

test.setStrings(strings);

将恢复原来的。

您可以执行以下操作:

  public static void main(String[] args) {
    ArrayList<String> originalStrings = new ArrayList<String>();

    originalStrings.add("One");
    originalStrings.add("Two");
    originalStrings.add("Three");

    ArrayList<String> strings = (ArrayList<String>) originalStrings.clone();

    Test11 test = new Test11();
    test.setStrings(strings);

    System.out.println("First get() of index 0: "+test.getStrings().get(0));
    System.out.println("Modifying test's strings object...");

    test.getStrings().set(0, "1");

    System.out.println("First get() of index 0: "+test.getStrings().get(0));
    System.out.println("Change it back... using strings variable");

    test.setStrings(originalStrings);

    System.out.println("First get() of index 0: "+test.getStrings().get(0));
}
于 2014-04-27T20:23:32.937 回答