2010-06-04 50 views
9

Tôi đã đọc câu hỏi ở đây: Is it problematic to assign a new value to a method parameter?. Tuy nhiên nó không phải là rõ ràng với tôi nếu làm một cái gì đó như:Java gán giá trị mới cho tham số, đây có phải là hành vi không tốt?

public void myMethod(Object obj) { 
    doSomething(obj); 
    obj = getNewObj(); 
} 

hay:

public void anotherMethod(Object obj) { 
    obj = doSomething(obj): 
} 

này về cơ bản chỉ là để tránh khai báo một biến địa phương mới, điều này có giá trị nó ?, là thấy điều này như một thực hành xấu ?.

+0

Tôi nghĩ bạn hiểu điều này, nhưng để chắc chắn: trong hai phương pháp ví dụ của bạn, việc gán cho 'obj' hoàn thành không có gì vì đối tượng mới không được sử dụng sau đó trong phương thức. – ColinD

+0

Vâng Tôi biết điều này, nhưng cảm ơn bạn đã bình luận của bạn. –

Trả lời

8

Đây là thực tiễn không tốt. Bạn sẽ khó ép để tìm một kịch bản mà khả năng đọc được hy sinh đáng giá. Điều này sẽ đặc biệt khó hiểu đối với bất kỳ ai không hiểu chính sách "vượt qua giá trị" của Java, điều đáng buồn là rất nhiều người.

+0

Một "nhiều người" được lấy mẫu từ dân số nào? Tôi nghĩ điều này phụ thuộc rất nhiều vào bối cảnh. Điều quan trọng là mức độ thẩm quyền của những người sẽ kế thừa mã của tôi. Khi viết mã trong một thiết lập chuyên nghiệp, tôi nghĩ rằng nó hợp lý để thừa nhận người kế thừa của tôi biết cách thông số phương pháp được thông qua. Ngược lại, tôi sẽ không giả định rằng khi đăng mã như một phần của một hướng dẫn trên - nói - một trang web lập trình trò chơi. – meriton

+0

@meriton, tôi thấy nó đúng với các lập trình viên có thể rất chuyên nghiệp, nhưng mới với Java và đến từ một backgroud của một ngôn ngữ pass-by-reference (ít nhất là nơi nó là một lựa chọn). – Yishai

+0

@meriton Tôi làm việc cho một tập đoàn lớn và đã gặp rất nhiều nhà phát triển java chuyên nghiệp không hiểu khái niệm này. Tôi không cố gắng để tha thứ cho nó, nhưng tại rất nhiều công ty của nó là một thực tế. – dbyrne

6

Hiệu suất 0, Khả năng đọc -1. Tôi muốn nhật thực có thể tự động thêm các thẻ cuối cùng.

+0

+1 cho luôn luôn có 'cuối cùng' cho các tham số phương thức. Mặc dù nếu nó làm cho chữ ký phương thức dễ đọc hơn thì nghi ngờ. – Pindatjuh

+4

Eclipse tự động thêm 'final' vào tham số phương thức và biến cục bộ nếu bạn định nghĩa hành động _save cho điều này. – tscho

Các vấn đề liên quan