首页 > 解决方案 > 如何从 kotlin 中的辅助构造函数调用“super()”?

问题描述

我刚刚开始使用 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
    }
}

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

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

     init {
         setMyScroller()
     }

     private fun setMyScroller() {
         //some code
     }
 }

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

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

     init {
         setMyScroller()
     }

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

     private fun setMyScroller() {
         //some code
     }
 }

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

标签: javaandroidkotlin

解决方案


class NonSwipeableViewPager: ViewPager {

    init {
        setMyScroller()
    }

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

    private fun setMyScroller() {
        //some code
    }
}

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


推荐阅读