Folks,Java - Clone tài sản bên trong phương thức getter
tôi đang trải qua thực hành mã hóa tốt nhất của Java đề cập ở đây
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/
quote thứ 2 nói,
Trích 2: Không bao giờ thực hiện một các trường mẫu của lớp công khai
Tôi đồng ý điều đó hoàn toàn chính xác, nhưng tôi đã bị mắc kẹt với những lời giới thiệu của nhà văn sau vài dòng bên dưới câu nói này.
Ông nói,
private String[] weekdays =
{"Sun", "Mon", "Tue", "Thu", "Fri", "Sat", "Sun"};
public String[] getWeekdays() {
return weekdays;
}
Nhưng viết phương thức getter không chính xác giải quyết vấn đề của chúng tôi. Mảng vẫn có thể truy cập được. Cách tốt nhất để làm cho nó không thể sửa đổi là trả về một bản sao của mảng thay vì mảng chính nó. Do đó, phương thức getter sẽ được thay đổi để
public String[] getWeekdays() {
return weekdays.clone();
}
Tôi chưa bao giờ bản thân mình sử dụng clone()
bên trong bất kỳ phương thức getter của lớp Java.
tôi tự hỏi (như nó được đề cập đến là một trong những thực hành tốt) - tại sao người ta should use
/shouldn't use
clone()
bên trong phương thức getter? và trong kịch bản nào?
Google có đủ điều kiện để trở thành một thực hành mã hóa tốt cho Java không?
Cảm ơn
IMO - Đối với các đối tượng không thể thay đổi và bản sao loại dữ liệu nguyên thủy là không bắt buộc. Đối với mọi thứ khác nếu chúng tôi thực sự muốn dữ liệu của chúng tôi được an toàn, chúng tôi phải trả lại bản sao bản sao chứ không phải bản gốc. –
Bạn có thể trả về 'Arrays.asList (các ngày trong tuần)', sẽ không thay đổi. – Jivings
@Jivings không đúng sự thật. Danh sách sẽ không chấp nhận các phần tử mới, nhưng phương thức set() hoạt động. –