Khi khai báo một lớp bên trong cục bộ bên trong một phương thức, tại sao nó lại hợp pháp để bao gồm các chuỗi tĩnh cuối cùng hoặc int nhưng không hợp pháp để bao gồm các đối tượng khác?Khai báo tĩnh Java cuối cùng trong phương thức lớp địa phương
Ví dụ:
class Outer {
void aMethod() {
class Inner {
final static String name = "compiles";
final static int ctr = 10; // compiles
final static Integer intThree = Integer.valueOf(3); // does not compile!
final static obj objConst = new Object(); // does not compile!
}
Inner inner = new Inner();
}
}
Khi tôi biên dịch này, tôi nhận được như sau:
InnerExample.java:6: inner classes cannot have static declarations
final static Integer outer = Integer.valueOf(3);
^
InnerExample.java:7: inner classes cannot have static declarations
final static Object objConst = new Object();
^
Tại sao sự khác biệt? Có phải vì String không thay đổi? Nếu vậy, sẽ không Integer.valueOf() cũng có giá trị?
Tôi khá chắc chắn đó là vì "biên dịch" và 10 là biểu thức hằng số biên dịch, nhưng tôi chưa tìm thấy quy tắc JLS xung quanh điều này. –