在非静态内部类中的静态最终对象处编译错误

时间:2014-12-27 15:02:37

标签: java nested-class

我是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;
    }
}

1 个答案:

答案 0 :(得分:1)

actual rule是静态字段必须是常量变量 - final和基元或Stringx很好,因为int是原始的; Logger不是。

(一本书所说的只是某人的意见;对于明确的答案,你无法超越规范。)