豆包

如果一个类内部有一个List,要保证该类对象的List不被外部对象修改,可以采取以下几种方法:

一、使用不可变列表

可以将内部的List初始化为不可变列表。在 Java 中,可以使用Collections.unmodifiableList方法来创建一个不可变的视图包装原始的列表。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class MyClass {
    private final List<String> list;

    public MyClass(List<String> originalList) {
        list = Collections.unmodifiableList(new ArrayList<>(originalList));
    }

    public List<String> getList() {
        return list;
    }
}

这样,外部代码在尝试修改这个列表时会抛出UnsupportedOperationException异常。

二、返回列表的副本

在提供获取列表的方法时,返回列表的副本而不是原始列表。

import java.util.ArrayList;
import java.util.List;

class MyClass {
    private List<String> list;

    public MyClass(List<String> originalList) {
        list = new ArrayList<>(originalList);
    }

    public List<String> getList() {
        return new ArrayList<>(list);
    }
}

这样外部代码修改副本不会影响到类内部的列表。

三、自定义不可变列表类

可以创建自己的不可变列表类,只暴露必要的方法,并且在这些方法中不提供修改列表的功能。

class ImmutableList<T> {
    private final List<T> internalList;

    public ImmutableList(List<T> originalList) {
        internalList = new ArrayList<>(originalList);
    }

    public int size() {
        return internalList.size();
    }

    public T get(int index) {
        return internalList.get(index);
    }
}

class MyClass {
    private final ImmutableList<String> list;

    public MyClass(List<String> originalList) {
        list = new ImmutableList<>(originalList);
    }

    public ImmutableList<String> getList() {
        return list;
    }
}

通过这些方法,可以有效地防止外部对象直接修改类内部的列表,保证数据的完整性和一致性。