2012-12-05 13 views
9

Với Java, có cách nào để tạo một lớp tùy chỉnh có thể có trình truy cập [] được sử dụng trên nó như một mảng không?Có cách nào để tạo một lớp tùy chỉnh có thể có [] được sử dụng trong Java, tương tự như một mảng không?

mảng bình thường

int[] foo = int[5]; 
foo[4] = 5; 
print(foo[4]); 
//Output: "5" 

Custom Class

class Bar { 
    //Custom class that uses index as a ref 
} 

Bar foo = new Bar(5); 
foo.set(4, 5); 
print(foo[4]); 
//Output: "5" 
+5

Tôi ước ... Nếu có thể ghi đè '[]', chúng ta sẽ không bị mắc kẹt với 'list.get (5)' và 'str.charAt (6)'? ... – dasblinkenlight

+0

Không , Tôi tiếp tục nghe những tin đồn rằng quá tải nhà điều hành sẽ có trong bản phát hành sau của Java, tuy nhiên tôi thành thật không nghĩ rằng nó sẽ được. –

+0

Như một lưu ý phụ, nhìn vào groovy :) –

Trả lời

15

Không, bạn không thể quá tải [] điều hành cho các lớp học của bạn trong Java. Nhưng bạn có thể tạo getter cho mảng của bạn.

6

Không, Java không có bất kỳ quá tải nào của toán tử.

4

Không, bạn sẽ phải triển khai phương thức public <Type> get(int index){ ... } của mình, chẳng hạn như ArrayList chẳng hạn.

-4

Chắc chắn,

thử

Bar[] foo = new Bar[4]; 
foo[2] = new Bar(); 
System.out.print(foo[2]); 

Trân

+4

Rất buồn cười ... (không, tôi không phải là kẻ phản đối). – dasblinkenlight

+0

tại sao các bạn -? –

+2

Bạn đang rất rất sai. – Lucas

1

Không, làm Java này sẽ phải bổ sung điều hành quá tải của [] - bạn cần phải sử dụng get/set phương pháp tương đương thay thế.

Không có kế hoạch hiện tại mà tôi biết để thực hiện quá tải nhà điều hành cho bất kỳ phiên bản Java nào trong tương lai - chắc chắn không có trong kế hoạch cho Java 8, và các cuộc đàm phán mà Oracle đã đưa ra trên Java 9 trở lên không bao gồm các kế hoạch nó. Cá nhân tôi không phải là fan của nó - nó giới thiệu rất nhiều biến chứng như ưu tiên và trật tự có thể dẫn đến những lỗi phức tạp, khó chịu trừ khi người dùng vô cùng cẩn thận, và (cho dù bạn đồng ý với lập trường này hay không) Tôi tin rằng đây là lý do quyết định được đưa ra để loại trừ nó khỏi ngôn ngữ ngay từ đầu.

+0

Quá tải toán tử tổng quát không có một số vấn đề, nhưng hầu hết trong số chúng xuất phát từ thực tế là không rõ ràng liệu 'thing1 + thing2' có nên được định nghĩa trong thing1 hoặc thing2 hay không. Ngược lại, rõ ràng hơn là 'thing1 [thing2]' nên được định nghĩa trong 'thing1'. – supercat

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