豆包
如果一个类内部有一个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;
}
}
通过这些方法,可以有效地防止外部对象直接修改类内部的列表,保证数据的完整性和一致性。