如何从 kotlin 中的辅助构造函数调用“super()”?

Jay*_*abu 6 java android kotlin

我刚刚开始使用 kotlin,我有一段 java 代码,我必须将其转换为 kotlin。这是Java代码:

public class NonSwipeableViewPager extends ViewPager
{
    public NonSwipeableViewPager(Context context) {
        super(context);
        setMyScroller();
    }

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        setMyScroller();
    }

    private void setMyScroller() {
        //some code
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这段代码中只有一个构造函数,我可以这样写:

class NonSwipeableViewPager(context: Context): ViewPager(context) {

     init {
         setMyScroller()
     }

     private fun setMyScroller() {
         //some code
     }
 }
Run Code Online (Sandbox Code Playgroud)

但是,由于有两个构造函数,每个构造函数都调用super()方法,我无法弄清楚如何将此代码转换为 kotlin。我最接近的是这个:

class NonSwipeableViewPager(context: Context): ViewPager(context) {

     init {
         setMyScroller()
     }

     constructor(context: Context?, attrs: AttributeSet?) : super(context!!, attrs) {
         setMyScroller()
     }

     private fun setMyScroller() {
         //some code
     }
 }
Run Code Online (Sandbox Code Playgroud)

但是,在此代码中,我在此行中收到以下错误super(context!!, attrs)primary constructor call expected 那么,如何super()从辅助构造函数调用?

Rya*_*fer 7

class NonSwipeableViewPager: ViewPager {

    init {
        setMyScroller()
    }

    constructor(context: Context) : super(context)
    constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)

    private fun setMyScroller() {
        //some code
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,辅助构造函数都不需要调用setMyScroller(),因为该init块将在调用后立即调用super

  • 1. 这里没有主构造函数,两个构造函数都是辅助构造函数;2. 它们都不需要调用,因为 `init` 块在两者之前调用(但在 `super` 调用之后)。 (2认同)