Cannot make a static reference to the non-static field memberVariable with private variable

前端 未结 3 973
一生所求
一生所求 2020-12-31 02:30

I created a enum with one private member variable. When i try to access the member variable the compiles states \'Cannot make a static reference to the non-static field memb

3条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-31 02:55

    A similar issue is covered by Puzzle 92 (Twisted Pair) in Java Puzzlers by Josh Bloch and Neal Gafter.

    It's nothing special about enums. Any anonymous (or local) inner class in a static context will do. The rules are that the outer class is considered before the super class. This makes a lot of sense for such classes in a non-static context. If changing the context to static changed which variable was looked up, the is the potential to introduce "confusion" at runtime (C++ is much more aggressive with this kind of rule).

    An inner class that extends an outer class has access to the private instance fields of the outer class, whether through this or some other instance.

    As we are allowed access, we need to somehow specify we want to go through the inner this rather than outer this. As Peter Lawrey points out super.member will do. You can also select the inner this, and then use that expression:

            return ((EnumWithAbstractMethodAndMembers)this).memberVariable + value;
    

    Or

            EnumWithAbstractMethodAndMembers innerThis = this;
            return innerThis.memberVariable + value;
    

提交回复
热议问题