2014-12-27 13 views
0

저는 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

은'logger'가이 허용되지 않는 이유는 컴파일 타임에 알려져 있지 않다. –

+0

Mhh, Logger'와'Logger4' ... 여기서 문제가 될 수 있습니까? – Tom

+0

@ 톰 오 ... 미안, 내 나쁜 .... 그 붙여 넣기 실수를 복사했다. 나는 지금 그것을 편집했다 ... –

답변

1

actual rule 정적 필드는 상수 변수 있어야한다는 것이다 - 모두 final 및 하나 또는 원시적 String. int이 프리미티브이기 때문에 x은 정상입니다. Logger은 그렇지 않습니다.

(어떤 책을 말하는 것은 누군가의 의견입니다. 확실한 대답을 당신이 스펙을 이길 수 없습니다)

+0

좋은 답변과 링크에 대한 감사. 지금 당장 말이야. –