Tôi vừa thực hiện một thay đổi mã nhỏ để tắt tiếng cảnh báo FindBugs yêu cầu di chuyển một số mã đến một lớp bên trong vô danh. Để truy cập một số biến, tôi phải khai báo các biến đó là final
. Vì vậy, đây là đoạn mã sau khi thay đổi:Khai báo biến cục bộ dưới dạng cuối cùng mà không cần khởi tạo và gán trong if-statement
final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
libPath = pathToFiles(libraryPath);
} else {
libPath = new File[0];
}
Điều này chỉ tốt với ngôn ngữ được đặt thành Java 6 trong Eclipse hiện tại (Phiên bản 3.7.1). Tuy nhiên tôi khá chắc chắn điều này được sử dụng để cung cấp cho một lỗi trong một số phiên bản trước đó. Dường như trình biên dịch chấp nhận cấu trúc này khi nó có thể xác định rằng sẽ có.
Câu hỏi của tôi là: điều này có hợp pháp trong Java 6 hoặc là một điều gì đó hiện đang hoạt động do tác dụng phụ của hỗ trợ Java 7 được thêm vào eclipse 3.7.1? Chúng ta đã thấy những tác dụng phụ như vậy với việc sử dụng một số generics hoạt động trong 3.7.1 nhưng không biên dịch trong 3.7.0.
Từ nhiều câu trả lời chính xác trỏ đến đặc tả ngôn ngữ, tôi sẽ chấp nhận câu trả lời này vì bạn là người đầu tiên trả lời. – Axel