Java вложенный класс со статическим инициализатором - PullRequest
1 голос
/ 11 декабря 2010

Читал книгу под названием Emergent Design и на тему синглтона ...

public class MyApp {
 private class SingletonHolder {
  public Object singleton; 
  static {
   singleton = new Object(); 
  }
 }
}

тогда затмение продолжает жаловаться на статические {}

Читал Java, классы должны иметь мультистатический инициализатор. Так как я могу заставить работать выше?


/tmp/jc_4873/MyApp.java:5: non-static variable singleton cannot be referenced from a static context
   singleton = new Object(); 
   ^
/tmp/jc_4873/MyApp.java:4: inner classes cannot have static declarations
  static {
  ^
2 errors

public class MyApp {
 private class SingletonHolder {
  public static Object singleton; 
  static {
   singleton = new Object(); 
  }
 }
}

/tmp/jc_8488/MyApp.java:3: inner classes cannot have static declarations
  public static Object singleton; 
                       ^
/tmp/jc_8488/MyApp.java:4: inner classes cannot have static declarations
  static {
  ^
2 errors

public class MyApp {
 private static class SingletonHolder {
  public static Object singleton; 
  static {
   singleton = new Object(); 
  }
 }
}

Ответы [ 2 ]

6 голосов
/ 11 декабря 2010

Чтобы поле было юридически указано в статическом контексте, оно должно быть локальным по отношению к контексту или объявлено как статическое в классе. Если вы хотите сослаться на singleton, вам нужно будет объявить его static.

2 голосов
/ 11 декабря 2010

Вам нужно поставить private static Object singleton; Статический блок не может изменить нестатическую переменную.

...