public class Application {
public static void main(String[] args) {
final class Constants {
public static String name = "globe";
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Constants.name);
}
});
thread.start();
}
}
编译错误:The field name cannot be declared static in a non-static inner type, unless initialized with a constant expression
解决这个问题?
答案 0 :(得分:8)
Java不允许您在函数本地内部类中定义非最终静态字段。只允许顶级类和静态嵌套类具有非最终静态字段。
如果您想在static
课程中使用Constants
字段,请将其设置为Application
班级,如下所示:
public class Application {
static final class Constants {
public static String name = "globe";
}
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Constants.name);
}
});
thread.start();
}
}
答案 1 :(得分:6)
内部类可能不会声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。
如果你只是制作变量final
:
public class Application {
public static void main(String[] args) {
final class Constants {
public static final String name = "globe";
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Constants.name);
}
});
thread.start();
}
}
当然,如果您需要使用非常量值初始化它,这将无效。
说完所有这些,这是一个不寻常的设计,IMO。根据我的经验,很难看到一个命名的本地课程。你需要这是一个本地课吗?你想要实现什么目标?