PMD có một quy tắc gọi là ArrayIsStoredDirectly trong ruleset Sun An ninh:lý do đằng sau ArrayIsStoredDirectly cai trị của PMD
nhà xây dựng và phương pháp nhận mảng nên sao chép các đối tượng và lưu trữ các bản sao. Điều này ngăn cản những thay đổi trong tương lai từ người dùng ảnh hưởng đến chức năng nội bộ.
Dưới đây là ví dụ của họ:
public class Foo {
private String [] x;
public void foo (String [] param) {
// Don't do this, make a copy of the array at least
this.x=param;
}
}
Tôi không nghĩ rằng tôi hoàn toàn hiểu được lý do đằng sau quy tắc này. Có phải vì các giá trị trong mảng được truyền có thể được thay đổi ở một nơi khác không? Có một sự khác biệt giữa việc vượt qua một Bộ sưu tập vs đi qua một mảng liên quan đến điều này?
Không có sự khác biệt về mảng truyền qua Bộ sưu tập. Một sự khác biệt nhỏ trong việc xử lý an toàn các mảng và các bộ sưu tập là với các mảng được phép gọi là .clone(), nhưng bạn không nên tin tưởng phương thức .clone() của một Collection. –