我是Java新手并为我的OCJP考试读书。在书中,它声明的非静态内部类只有在声明为static final 时才能拥有静态成员。但是当我尝试创建容器类的static final object
时,我收到编译错误。
class Logger {
private Logger() {
// private constructor for singleton
}
public class LoggerHolder { // non static inner class
public static final int x =10; // No compile here
public static final Logger logger = new Logger(); //Compile error
}
//"The field logger cannot be declared static; static fields can only be declared in static or top //level types"
public static Logger getInstance() {
return LoggerHolder.logger;
}
}
答案 0 :(得分:1)
actual rule是静态字段必须是常量变量 - final
和基元或String
。 x
很好,因为int
是原始的; Logger
不是。
(一本书所说的只是某人的意见;对于明确的答案,你无法超越规范。)