關於在外部對內部類進行例項化和引用
阿新 • • 發佈:2018-12-23
有些時候在寫一些小的專案或者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類的其他成員。這種情況下A與B之間聯絡密切,例項化B必須取得A的引用。
當然,在專案規模較大而且考慮到後續的拓展,還是儘量採用合適的架構和寫成獨立的類。