Java - 在getter方法中克隆属性

sgo*_*les 7 java clone coding-style getter-setter

伙计们,

我正在阅读这里提到的Java最佳编码实践
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/

第二句话说,

引用2:永远不要将类的实例字段设为public

我同意这是绝对正确的,但是因为跟着作家的推荐,我在这个引言下面几行.

他说,


private String[] weekdays = 
    {"Sun", "Mon", "Tue", "Thu", "Fri", "Sat", "Sun"};

public String[] getWeekdays() {
    return weekdays;
}
Run Code Online (Sandbox Code Playgroud)

但是编写getter方法并不能完全解决我们的问题.该阵列仍然可以访问.使其不可修改的最佳方法是返回数组的克隆而不是数组本身.因此,getter方法将更改为

public String[] getWeekdays() {
    return weekdays.clone();
}
Run Code Online (Sandbox Code Playgroud)

我从未clone()在Java类的任何getter方法中使用过.

我想知道(因为它被提到是一个良好的做法) - 为什么一个should use/ shouldn't use clone()内部getter方法?在哪些情况下?

是否有资格成为Java的良好编码实践?

谢谢

mad*_*th3 5

这在本书中讨论的"有效的Java"约书亚·布洛克.有一节名为"在需要时制作防御性副本"(第2版第39节).

我认为Google图书可能会让您看到该部分的预览.

一本关于这样的话题的好书.