Почему этот код перечисления является незаконной ссылкой на статическое поле?

Этот код не скомпилируется, потому что в нем есть недопустимая ссылка на статическое поле.

public enum Foo {

  A,
  B;

  private Foo[] foos = new Foo[] { Foo.A };

}

Разве вы не должны иметь возможность обращаться к статическим полям из инициализатора нестатического поля? Например:

public class Foo {

  static int A;

  private int[] foos = new int[] { Foo.A };

}

Этот код компилируется нормально.

Обратите внимание, что если в первом примере сделать foos статическим, то компилируется.

17
задан skaffman 1 February 2012 в 15:53
поделиться