2011-07-12 31 views
6

thể trùng lặp:
Cannot refer to a non-final variable inside an inner class defined in a different methodTại sao nó không thể trong java để tham chiếu biến không cuối cùng trong lớp ẩn danh bên trong?

Tại sao nó không thể trong java để tham khảo biến phi chính thức trong lớp vô danh bên trong? Câu trả lời đơn giản sẽ là "Bởi vì nó bị cấm", nhưng tôi muốn biết, TẠI SAO họ đã cấm chức năng hữu ích này? Có thể có một số loại khả năng mà Java thiếu hoặc được thiết kế theo cách "sai". Tôi muốn biết.

+0

Nhìn vào bài đăng này, nó có thể giúp một chút: http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined- in-a-different – mandubian

+1

Đã trả lời ở đây: http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different – Jacob

+0

@cularis, tôi đã xem xét nó nhưng do chỉnh sửa nó không rõ ràng những gì câu trả lời để xem xét chính xác. – dhblah

Trả lời

3

Lý do là sau khi phương thức kèm theo trả về, biến cục bộ không còn tồn tại. Do đó một bản sao của biến được tạo ra khi lớp ẩn danh được instanciated. Nếu Java cho phép biến cục bộ được thay đổi sau đó, lớp ẩn danh sẽ chỉ biết giá trị cũ.

Cách thức Java thực hiện nó trái ngược với bất kỳ ngôn ngữ nào khác được thực hiện từ closures.

+2

Như tôi xem nó, lệnh cấm tồn tại để duy trì ảo tưởng rằng lớp ẩn danh sử dụng biến trực tiếp thay vì một bản sao, và để tránh những người có kỳ vọng sai. –

+0

Michael: Chính xác –

+0

Cảm ơn câu trả lời của bạn, nhưng tôi không chắc chắn rằng biến được sao chép, do bạn hoàn toàn có thể vượt qua biến cuối cùng, sau đó thay đổi một trong các trường bên trong ẩn danh và thay đổi đó sẽ hiển thị trong phương thức kèm theo. – dhblah

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