2013-03-07 72 views
0

我有一個簡單的問題,但無法找到答案的任何地方。斯卡拉 - 自定義類的構造函數

我有以下的java代碼。的FrameLayout是具有2層構造的機器人類:

public class FrameLayout { 
    public FrameLayout(Context context){ //do something 
    } 
    public FrameLayout(Context context, AttributeSet attrs){ //do something 
    } 
    .... 
} 

public class ClassA extends FrameLayout{ 
    public ClassA(Context c){ 
     super(c); 
     callSomeInitMethod(); 
    } 

    public ClassA(Context a, AttributeSet b){ 
     super(a,b); 
     callSomeInitMethod(); 
    } 
} 

我有以下的Scala代碼,但作爲默認的構造函數不調用它的不一樣「callSomeInitMethod()」:

abstract class BaseComponent(context : Context, attrs : AttributeSet) 
           extends FrameLayout(context, attrs) { 
    def this(context : Context) = { 
    this(context, null) 
    callSomeInitMethod() 
    } 

我如何在Scala中實現這一點?謝謝!。

+0

還有就是你們的榜樣,不能在Scala中完成的部分:兩個構造函數調用不同的父類的構造函數。在Scala中,只有主構造函數調用父類構造函數,而所有次構造函數只能調用主構造函數。 – 2013-03-07 19:41:49

+0

他/她可能已經知道這一點,因爲在他的scala轉換中,他明確地將null傳遞給主構造函數,而不是調用不同的基構造函數。 – 2013-03-07 21:20:54

回答

2

只需撥打電話callSomeInitMethod即可。這使得它的主要構造(因此,所有的二級構造函數)的一部分:

abstract class BaseComponent(context : Context, attrs : AttributeSet) 
    extends FrameLayout(context, attrs) 
{ 
    callSomeInitMethod() 

    def this(context : Context) = { 
    this(context, null) 
    } 
}