2013-04-25 70 views
1

我有兩個緊密結合的類簇。爲了說明起見,我們打電話給view,其他templatetemplate告訴view如何看。我有一個基地view和基地template類和他們的一些成對的子類。將繼承的變量轉換爲子類

所以,像這樣:

基類

BaseTemplate < - >基本視點

子類

TemplateA < - > ViewA
TemplateB < - > ViewB
TemplateC < - > ViewC
模板< - > ViewD

view S(即使基部view)每個都具有template,相應類型的,作爲一個變量。 如何投射,例如,在BaseView中聲明的BaseTemplate的變量爲TemplateB,在ViewB中聲明的變量?我希望能夠在BaseTemplate中設置變量信息,而不是必須在所有模板子類中設置通用信息。

+0

通常,您會使用泛型來表達這一點,儘管可能只在一個方向上。 – 2013-04-25 22:18:03

+0

@PaulBellora我不太清楚「express」是什麼意思。 – RileyE 2013-04-25 22:18:49

+0

我的意思是聲明'BaseView ','ViewA擴展BaseView​​'等,你提到不想這樣做,所以我沒有發佈它作爲答案。不過,我對此感興趣。 – 2013-04-25 22:27:06

回答

1

聽起來好像你可以用generics來解決這個問題。例如:

public abstract class BaseView<T extends BaseTemplate> { 

    private final T template; 

    protected BaseView(T template) { 
     this.template = template; 
    } 

    //common view methods operating using T etc. 
} 

public final class ViewA extends BaseView<TemplateA> { 

    public ViewA() { 
     super(new TemplateA()); //or wherever templates come from 
    } 

    // ViewA specific stuff 
} 
+0

因此,如果我在'ViewA'中有一個名爲templateA的'TemplateA()'的本地專用引用,那麼我在模板中設置的任何值都將在templateA中設置?另外,最後只是說它只能設置一次?我原以爲這意味着它必須設置爲內聯。 – RileyE 2013-04-25 22:43:07

+0

我對最後一點表示歉意。一個簡單的谷歌是我所需要的。 ('最後一個變量只能通過初始化程序或賦值語句初始化一次.') – RileyE 2013-04-25 22:44:37

+0

我進一步道歉,但是這個語法只是被點擊了。 <>只是說有一個'Class'可以被子類化,但是它還沒有明確說明它是如何的。 'T'本質上是一個空子類,它擁有超類的每個組成部分,而'​​'是它最終明確指出和「轉換」/將變量'模板'轉換爲子類類型'TemplateA'的地方。謝謝! – RileyE 2013-04-25 22:53:27