2014-11-17 100 views
-1

我有一個類似「Defining inner class outside java file」的問題。 但是,那裏的提問者只是想通過讓這些類全都在一個包中來做某件事。如何定義外部類之外的內部類

與他類似,我想定義一些類作爲外部對象的內部對象;但我想訪問該對象的動態字段。爲了避免擁擠的類,我想在其他一些「innerClasses.java」中定義它們。使用「擴展」只能使我能夠使用它的靜態字段。但是,我想訪問像內部對象一樣的動態字段。

作爲一個簡單的例子(但其實是一個大的例子是有問題的)我想這個類的類「OuterClass.java」

public class OuterClass{ 
    double nonStaticField 
} 

而且每個類的其他類

public class InnerClass1OfOuterClass{ 
    ... 
} 

public class InnerClass2OfOuterClass{ 
    ... 
} 

public class InnerClass3OfOuterClass{ 
    ... 
} 

public class InnerClass4OfOuterClass{ 
    ... 
} 

.... 
+2

你是什麼意思的「動態領域」? –

+1

如果這是可能的,這會讓我震驚。 – wvdz

+0

你能概述課堂設計的外觀嗎? – Fildor

回答

1

「自然」的方式將是周圍的其他方法:讓一個內部類擴展含主代碼一些抽象類:

class Outer { 
    class Inner extends InnerBase<Outer> { 
     ... little code 
    } 
} 

class InnerBase<T> { 
    protected int eger; 
    ... most code 
} 

然後還有一個委託給不同的班級。

現在,如果你還是想擴展內蒙古:

class InnerBase<T> { 
    protected int eger; 
    ... most code 
} 

class Sinner extends Outer.Inner { 
} 

Outer outer = new Outer(); 
Inner sinner = outer.new Sinner(); 

出於實用的目的,你可能在外面

protected Inner createInner() { return new Inner(); } 

創建和擴展外,覆蓋工廠方法createInner。

此代碼設計可能有點環境,因此我的「自然」在一開始。

+0

我很確定,OP並不需要這一切。我懷疑這裏是一個XY問題。 – Fildor

+0

@Fildor對,這基本上是一個XY問題:「我怎麼用這個螺絲刀工具錘釘子?」然而,利用正確的語言結構(工具)來實現「優雅」的代碼需要一些嘗試。這裏可以假定OP有內部類的代碼,現在想要清除它。不幸的是使用繼承。 –

+0

擴展外部類是一個非常好的起點,如果你必須使用內部類來實現某些事情......儘管它可以很容易地用在錯誤的上下文/糟糕的設計中,但我總是喜歡它,總體思路是*很好! – Levit

相關問題