1. 程式人生 > >關於在外部對內部類進行例項化和引用

關於在外部對內部類進行例項化和引用

有些時候在寫一些小的專案或者demo時,為了方便或者邏輯上歸類往往定義一些內部類,比如一些小型的model,各種Adapter、BroadcastReceiver等等。

類似結構:

class A{
    static class B{
        public void put(){
           System.out.println("abc);
        }      
    }
}


此時,對B進行例項化這樣:
A.B b1  = new A.B();
b1.put();

此時類B作為類A中的靜態成員,可以以A.B的形式對B進行訪問而不必例項化A。 這種形式的優點是訪問方便,清晰明瞭,不必持有A的引用;缺點是不利於在A與B之間進行資料傳遞。

例如:

class A{
    String str = "abc";
    static class B{
        public void put(){
            System.out.println(str);
        }      
    }
}

此時將報錯Cannot make a static reference to the non-static field str,即靜態的成員不能持有非靜態的成員的引用。 可以將str改為static,將B要訪問的成員都改為static,但這會導致static的濫用違背面向物件的思想,還可能會造成記憶體洩漏。 另一種用法是將class B的static 修飾去掉
class A{
    class B{
	public void put(){
            System.out.println("abc");
        }      
    }
}


這樣例項化
A a1 = new A();
A.B b1 = a1.new B();
b1.put();

先取得A的引用,在藉由A的例項對B進行例項化,由於此時B作為A的成員,因此B中可自由訪問A類的其他成員。這種情況下AB之間聯絡密切,例項化B必須取得A的引用。

當然,在專案規模較大而且考慮到後續的拓展,還是儘量採用合適的架構和寫成獨立的類。