在我大学的一个软件开发课上,老师一直提到在测验中我们需要确保吸气剂返回的磁场需要"保护".我想她的意思是课外的任何东西都不应该改变它.她没有提供更多的解释.
例如:
class Foo { string[] bar =; public string[] getBar() { return bar; } }
任何调用getBar的代码都可以修改该数组中的元素.你怎么防止这种情况发生?我假设对象本身应该能够修改数组,而不是对象之外的任何东西.
这不是作业帮助,因为测验是几周之久.我只是想更好地理解Java,因为我的老师没有很好地解释.
更新:教师不仅允许我们在场上使用protected作为访问修饰符.
您可以使用集合并将其包装在Collections.unmodifiable*()中,也可以防御性地复制数组,集合或对象(如果它是可变的(总是哪些数组)).
例如:
class Foo { private String[] bar =; public String[] getBar() { return bar == null ? bar : Arrays.copyOf(bar); } }
您需要注意的是,这是一个浅层副本(克隆版也是如此).不确定你的老师克隆的问题是什么.
只是要添加到以前的答案之一,您希望确保使用集合而不是使用clone()方法来实现您在此处尝试实现的目标.这仅创建集合的浅表副本,集合副本中包含的所有对象引用仍指向与原始对象相同的对象,例如,即使原始集合不能,也可以修改集合副本中的对象.如果您正在尝试这样做,请确保您正在复制已归还的集合.