2014-10-01 35 views
-1

假設我有以下類java的外單獨的類訪問匿名類

Class0

public abstract class Class0 { 

public Class0(){} 
    public void abmethod1(){ 
     System.out.println("Abstract method 1"); 
    } 

    public void abmethod2(){ 
     System.out.println("Abstract method 2"); 
    } 
} 

的Class1

public class Class1 { 
    private List<Integer> aList; 

    public Class1(){ 
     this.aList= new ArrayList<>(); 
    } 

    public Integer getElementAt(int i){ 
     return this.aList.get(i); 
    } 

    public int getSize(){ 
     return this.aList.size(); 
    } 

    public void add(int num){ 
     this.aList.add(num); 
    } 
} 

的Class2

public class Class2 { 
    private Class0 c0; 
    private Class3 c3; 
    public Class2(){ 
     this.c0 = new Class0() { 
      Class1 c1 = new Class1(); 

      @Override 
      public void abmethod1(){ 
       System.out.println("Abstract method 1 called. Size is " + c1.getSize()); 
      } 

      @Override 
      public void abmethod2(){ 
       c1.add(1); 
       c1.add(2); 
       c1.add(3); 
       System.out.println("Abstract method 2 called. Size is " + c1.getSize()); 
      } 
     }; 
     this.c3 = new Class3(); 
     c3.methodc2(c0); 
    } 
} 

Class3的

public class Class3{ 
    public void methodc2(Class0 c0){ 
     c0.abmethod1(); 
     c0.abmethod2(); 
    } 
} 

CLASS4

public class Class4 { 
    private Class2 c2; 

    public Class4(){ 
     c2 = new Class2(); 
    } 
} 

Class5

public class Class5 { 
    private Class2 c2; 

    public void method2(){ 
     this.c2 = new Class2(); 
    } 
} 

然後我るn個主類

public class Class6 { 
    public static void main(String[] afg){ 
     Class4 c4 = new Class4(); 
     Class5 c5 = new Class5(); 
     c5.method2(); 
    } 
} 

而我得到的消息

Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 
Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 

所以我想利用我的列表的最後大小(在此爲3)每次我打電話內Class3的匿名上課時間。我怎樣才能防止它產生Class0的新實例,以便採取輸出

Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 
Abstract method 1 called. Size is 3 
Abstract method 2 called. Size is 6 

預先感謝您

+1

如果你更習慣地縮進你的代碼,它會*真的*幫助...縮進所有的方法。 (我現在已經爲你完成了這個工作,但請在將來更注意格式化你自己。) – 2014-10-01 09:25:31

+0

對不起,我不知道你想如何縮進..空間和樣式有什麼問題......? – 2014-10-01 09:33:40

+0

比較它現在的外觀和編輯前的外觀。如果你使用的是一個爲你做縮進的IDE,我非常懷疑你有沒有縮進的類聲明下的方法聲明...... – 2014-10-01 10:00:32

回答

1

如果你的目標是,Class2所有實例將共享Class0同一實例,您可以通過使成員Class2成爲靜態來實現。在這種情況下,您需要在靜態初始化塊中初始化c0變量,而不是在構造函數中。

public class Class2 { 
    private static Class0 c0; 
    private Class3 c3; 
    static 
    { 
     Class2.c0 = new Class0() { 
      Class1 c1 = new Class1(); 

      @Override 
      public void abmethod1(){ 
       System.out.println("Abstract method 1 called. Size is " + c1.getSize()); 
      } 

      @Override 
      public void abmethod2(){ 
       c1.add(1); 
       c1.add(2); 
       c1.add(3); 
       System.out.println("Abstract method 2 called. Size is " + c1.getSize()); 
      } 
     }; 
    } 
    public Class2(){ 
     this.c3 = new Class3(); 
     c3.methodc2(c0); 
    } 
} 

如果不知道代碼的用途,是否所有這些都是有道理的。

+0

好吧,它更復雜。我有一個JTable,每次單擊一個單元格時,我都想將單元格座標放在列表中。之後,我按下一個按鈕並用顏色給這些單元格着色。但我不能着色,因爲我在列表大小中得到0! :-) – 2014-10-01 09:38:44