What I try to do is this:
public class History {
public class State {
public enum StateType {
Eclipse gives me this compile error on StateType
: The member enum StateType must be defined inside a static member type
.
The error disappears when I make the State
class static. I could make State
static, but I don't understand why I cannot declare an enum
in an inner class.
Already enough information from +Joachim Sauer, I am just adding some extra details.
You can define inner enum only if your inner class is static nested inner class. See below
enum
types that are defined as nested types are always implicitlystatic
(see JLS §8.9. Enums)You can't have a static nested type inside a non-static one (a.k.a an "inner class", see JLS §8.1.3. Inner Classes and Enclosing Instances).
Therefore you can't have an
enum
inner type inside a non-static nested type.If you declared an enum like this:
The Java compiler would synthetically generate the following class for you:
There is no intention to create other instances of this class other than those static fields already defined in it (as you could infer from its private constructor), but most importantly, and as mentioned in the accepted answer, a inner class cannot have static members (JLS §8.1.3. Inner Classes and Enclosing Instances), and since the enum synthetic class does, it makes it unacceptable as inner class.