2012-11-30 70 views
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 method/fieldJava枚舉私人方法在項目的構造函數

+0

錯誤信息究竟是什麼? –

回答

8

爲了能夠從item1訪問minus(),您必須將其設置爲protected(或public)。

想想Parentitem1的正確方法是作爲基類和子類。

JLS

枚舉常數的可選類體隱式地定義一個匿名類聲明(§15.9.5)延伸立即封閉枚舉類型

1

問題是「item1」不是父類的內部類,它實際上是頂級類。要驗證看到item1的生成類,它是父$ 1.class,如果它是一個內部類,它將是父$ item1.class

2

實際上發生的是,當您提供實現時創建枚舉對象,你基本上是擴展Parent類帶有額外的方法,例如Annonymous的實現。因此它不允許訪問Parent類的私有方法,但允許protectedpublic

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


     public void method(){ 

     } 
    } 

這應該解釋看看eclipse提供的@Override註釋。