2013-03-07 2 views
0

У меня есть простой вопрос, но я не могу найти ответ нигде.Scala - пользовательские конструкторы классов

У меня есть следующий код 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 только основной конструктор когда-либо называет конструктор родительского класса, и все вторичные конструкторы могут вызывать только первичный конструктор. –

+0

Он, вероятно, уже знает это, учитывая, что в своем преобразовании scala он явно передает null в главный конструктор вместо вызова другого базового конструктора. –

ответ

2

Просто позвоните callSomeInitMethod в корпус класса. Это делает его частью главного конструктора (и, следовательно, все вторичные конструкторов):

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

    def this(context : Context) = { 
    this(context, null) 
    } 
} 
Смежные вопросы