加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 静态上下文在枚举定义中

发布时间:2020-12-15 00:09:16 所属栏目:Java 来源:网络整理
导读:Java的枚举工具提供的语法糖有时可能会有点混乱.考虑这个例子,没有编译: public enum TestEnum { FOO("foo") { public void foo() { helper(); // - compiler error } }; String name; TestEnum(String name) { this.name = name; } public abstract void f
Java的枚举工具提供的语法糖有时可能会有点混乱.考虑这个例子,没有编译:
public enum TestEnum {

    FOO("foo") {
        public void foo() {
            helper();  // <- compiler error
        }
    };

    String name;
    TestEnum(String name) {
        this.name = name;
    }

    public abstract void foo();

    private void helper(){
        // do stuff (using this.name,so must not be static)
    }
}

任何人都可以解释为什么编译器说

Non-static method ‘helper()’ cannot be referenced from a static context

这个上下文如何静态?

您可以通过更改对this.helper()的调用来进行编译(这里有一个令人困惑的观点:如果我们真的处于编译器建议的“静态上下文”中,那么“这个”如何工作?)或者增加可见性的帮助()到默认级别.你更喜欢哪个?另外,请随便提出一个更好的问题标题:-)

编辑:我发现some discussion about this – 但没有真正的答案.我的同事认为,this.helper()的作用实际上是一个编译器错误.确实使用较新的Java版本似乎不起作用(尽管super.helper()):“找不到符号帮助()”. (虽然有一些奇怪的事情:在尝试使用不同的Java版本后,我无法让这个.helper()重新编译,其中任何一个…)

解决方法

错误消息是误导性的,只是让帮助者保护并且它将工作.
protected void helper(){
    // can be called from subclasses (such as FOO) since it is not private
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读