2010-03-11 34 views
5

Tại sao java được xác định sao cho các phương thức có thể lấy làm nhiều tham số đầu vào,
nhưng chỉ có thể trả về một đối tượng đơn lẻ (hoặc void)?Tại sao Java có thể lấy nhiều tham số nhưng chỉ có thể trả về một đối tượng?

Ứng dụng có giúp ngôn ngữ dễ dàng hơn trong việc triển khai hoặc sử dụng không?

+0

Nó không thực sự cung cấp bất kỳ giải pháp nào cho một cách hiệu quả để trả lại nhiều đối số. Đối với bản ghi, nếu tôi muốn một phương thức để có thể trả về một đối số, tôi chuyển một mảng được lưu trữ (độ dài 1) của kiểu được yêu cầu làm đối số và đặt trường đầu tiên, bạn có thể trả về một mảng đối tượng và sử dụng nó, nhưng tạo đối tượng không cần thiết của nó mà bạn muốn tránh. –

Trả lời

5

Có lẽ vì đây là cách mà C và C++ thực hiện và cú pháp ngôn ngữ Java rất giống với (và có thể dựa trên) các ngôn ngữ đó.

Trong thực tế, theo this article, Gosling bắt đầu bằng cách mở rộng ++ biên dịch C, vì vậy nó có ý nghĩa rằng ông sẽ làm theo nhiều của cùng một cú pháp:

Để phát triển một quá trình nền tảng trung lập hơn (và do đó đáp ứng nhu cầu của thị trường tiêu dùng về tính linh hoạt của CPU), Gosling bắt đầu bằng cách mở rộng trình biên dịch C++.

5

Có thể ý định là nhiều giá trị trả lại được đóng gói trong một đối tượng?

+0

Không quan tâm thực tế là các đối tượng được chuyển qua tham chiếu. – Paul

0

Dự đoán của tôi là quy ước: đó là những gì các ngôn ngữ chính của OO đã làm/đã làm, vì vậy đó là những gì Java đã làm. Tuy nhiên, lập luận chính thức có lẽ sẽ giống như đối số về việc đóng cửa - không bao gồm những thứ sẽ tạo ra cú pháp chuẩn cho các tác vụ trần tục với các nhiệm vụ không thực sự cần thiết. Hoặc có thể họ đã tìm ra rằng một phương thức đơn lẻ nên trả về một tập các giá trị liên quan nên/có thể đi vào một đối tượng. Hoặc có thể họ không nghĩ về nó/có thời gian (giá vé phát triển khá chuẩn).

Trên một lưu ý liên quan, tôi thấy cuộc thảo luận này của việc sử dụng đóng cửa để thử nhiều lợi nhuận: http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

4

Tôi không biết chắc chắn, nhưng tôi tưởng tượng rằng Java được thực hiện giống như bất kỳ thời gian chạy dựa trên stack khác. Điều đó có nghĩa là việc chuyển các mục như các tham số vào một phương thức được thực hiện dễ dàng bằng cách đẩy chúng vào ngăn xếp trước khi chuyển điều khiển sang phương thức. Các giá trị trả về có thể được xử lý trong máy ảo như C và C++ do - giá trị trả về luôn được đặt trong sổ đăng ký, là giá trị tự nhiên duy nhất. Tuy nhiên, nó không phải là một vấn đề lớn, bởi vì với generics, trả lại nhiều giá trị có thể được xử lý một cách an toàn kiểu bằng cách trả về một thể hiện của một cái gì đó như Tuple<type1, type2, type3>, mà không phải là một gánh nặng quá lớn trong hầu hết các trường hợp. .

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