Ai đó có thể tưởng tượng khi mã này:nên MAIN phương pháp sao chép đối số đầu vào?
public static void main(final String[] args) {
// do something
}
nên trở thành này:
public static void main(final String[] args) {
String[] argsCopy = doCopy(args);
// do something
}
(Trong công ty chúng tôi, chúng tôi có một quy tắc Sonar rằng các lực lượng đối phó như vậy hoặc đối số cho tất cả các phương pháp này.) Tôi có thể tưởng tượng tại sao nó có thể quan trọng đối với các phương pháp tiêu chuẩn, nhưng tôi không thể tìm thấy bất kỳ lợi ích nào của việc thực hiện nó khi bắt đầu các phương pháp chính của công cụ. Tui bỏ lỡ điều gì vậy?
Bạn rõ ràng nên sử dụng các ngôn ngữ không thể thay đổi trạng thái người gọi. Điều đó đang được nói, nó là người nghèo công cụ không nhận ra nếu đối số là thực sự đột biến. – Ingo
một số cuộc thảo luận ở đây: http://stackoverflow.com/questions/11580948/sonar-violation-security-array-is-stored-directly –
Tôi không phải là người đam mê quy tắc sonar này. Hơn thế nữa - tôi coi quy tắc này là ý tưởng tồi. Điều gì xảy ra nếu tôi muốn lưu trữ byte dữ liệu nhị phân lớn [] trong các đối tượng của tôi? Sao chép sau đó chỉ sau khi được xây dựng từ một số dòng là không cần thiết theo ý kiến của tôi. –