假设我有一个简单的类,它将用户的朋友存储在字符串的 ArrayList 中,并使用 getter 访问该 ArrayList:
public class User
{
private ArrayList<String> mFriends;
// ...other code like constructors and setters...
public ArrayList<String> getFriends()
{
return mFriends;
}
}
Run Code Online (Sandbox Code Playgroud)
由于 Java 和许多其他语言(等效地)是按引用传递的,这是否不允许 getFriends() 的调用者直接访问我的 ArrayList 字符串,即他们甚至可以在不调用我的 setter 的情况下修改它?
我觉得这极大地打破了封装的概念。除了动态创建一个具有相同值的新 ArrayList 并返回它之外,是否有正常的解决方法,或者我误解了什么?
编辑:我知道 Java 并不是真正的引用传递,而是传递原始对象地址的副本,但这与将对象暴露给类外的对象时传递引用的效果相同
.clone());new ArrayList<>(yourObjectHere));