2014-12-27 2 views
0

Я новичок в Java и читаю книгу для своего экзамена OCJP. В своей заявленной заявке нестационарный внутренний класс может иметь статические члены только в том случае, если они объявлены статическим окончанием. Но я получаю ошибку компиляции, когда пытаюсь создать класс контейнера 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

@Tom oh ... извините, мой плохой .... это был копирование паста ошибка. Я отредактировал его сейчас ... –

ответ

1

actual rule является то, что статическое поле должно быть постоянной переменной - как final и либо примитив или String. x - это хорошо, потому что int является примитивным; Logger нет.

(Какая книга говорит только чье-то мнение,. Для окончательного ответа вы не можете бить спецификации)

+0

Отличный ответ и благодарность за ссылку. Теперь это имеет смысл ... –

Смежные вопросы