Đoán của bạn là chính xác. Một wrapper là cần thiết (nhưng không phải là Integer vì nó là bất biến).
Một số người sử dụng mảng yếu tố duy nhất cho mục đích này:
int[] x = { 0 };
int[] y = { 0 };
someMethod(x, y);
return x[0] + y[0];
Nhiều sẽ xếp hạng kỹ thuật mà phải lên đó với GOTO.
Một số người định nghĩa một lớp giữ generic:
public class Holder<T> {
private T _value;
private Holder(T value) { _value = value; }
public static of(T value) { return new Holder<T>(value); }
public T getValue() { return _value; }
public void setValue(T value) { _value = value; }
}
...
Holder<String> x = Holder.of("123");
Holder<String> y = Holder.of("456");
someMethod(x, y);
return x.getValue() + y.getValue();
Một số định nghĩa một kiểu mục đích xây dựng:
SomeMethodResult result = someMethod(x, y);
return result.getX() + result.getY();
Một số sẽ sắp xếp cho công việc sẽ được thực hiện bên trong phương pháp, tránh sự cần thiết cho các đối số tham chiếu ở vị trí đầu tiên:
return someMethod(x, y);
Mỗi kỹ thuật này s có lợi thế và bất lợi:
- mảng: đơn giản so vớixấu xí, dựa vào mảng có đúng một phần tử
- giữ: an toàn so với tiết, đấm bốc
- mục đích xây dựng loại: an toàn so với tiết, có thể quá mức cần thiết
- thay đổi phương pháp: an toàn, vs sạch phải lúc nào cũng có thể
Cá nhân, tôi nghĩ rằng Java đã làm rối tung điều này. Tôi muốn tránh các tham số không tham chiếu, nhưng tôi muốn Java cho phép nhiều giá trị trả lại từ một phương thức. Nhưng, trung thực, tôi không thường xuyên đi qua cái này. Tôi sẽ không đưa ra một quả thận cho tính năng này. :)
Tôi thích kỹ thuật 'int []'. Tôi đã thử nó và nó hoạt động tốt. Cảm ơn. – Tarik
+1 Câu trả lời toàn diện và tôi khá đồng ý với đoạn cuối. – BoltClock
IMO 'int []' là xấu xí nhưng không ở đâu gần "' goto' -level ". Đó là hack xung quanh việc thiếu một tính năng ngôn ngữ (thực sự pass-by-tham khảo) theo cách đơn giản, mà làm cho nó khá nhiều chính xác cùng một điều như "đi qua con trỏ" trong C. Chúng tôi không cần nó thường xuyên trong Java như trong C, nhưng đó là cơ bản chỉ vì cách hai ngôn ngữ đối phó với quản lý bộ nhớ và, trên một mức độ khái niệm hơn, "quản lý đối tượng". –