Java枚举中的私有方法在项目构造函数中

4
public enum Parent {
    item1(1){

        public void testing() {
            add();
            multiply();
            minus(); // error here!!!
        } 

    }, item2(2);

    private int i ;
    Parent(int i){
        this.i = i;
    }

    public void setI(int i ){
        this.i = i;
    }
    public int getI(){
        return i;
    }

    public void multiply(){

    }
    protected void add(){

    }

    private void minus(){

    }
}

正如大家所看到的,它们位于同一类中,为什么minus()不能在内部使用?通常内部类可以访问外部类中的private方法/字段,对吧?

错误信息是什么? - Cameron Skinner
3个回答

9
要想从item1访问minus(),你必须将其设置为protected(或public)。
正确理解Parentitem1的方式是将它们视为基类和子类。
根据JLS

枚举常量的可选类体隐式定义了一个匿名的类声明(§15.9.5),该类扩展了直接封闭的枚举类型


3

实际上,当您在创建枚举对象时提供实现时,您基本上是使用额外的方法即匿名实现扩展了Parent类。因此,它不允许访问Parent类的私有方法,但允许访问protectedpublic方法。

enum A{
        a{
            @Override
            public void method() {
                // TODO Auto-generated method stub
                super.method();
            }
        };


        public void method(){

        }
    }

这应该解释了eclipse提供的@Override注释。


1
问题在于“item1”不是Parent的内部类,它实际上是顶级类。要验证,请查看item1的生成类,它是Parent$1.class,如果它是内部类,它将是Parent$item1.class。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接