繁体   English   中英

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

[英]How to call 'super()' from a secondary constructor in 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
    }
}

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

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()

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调用后立即调用。

像这样改变你的代码

class NonSwipeableViewPager : ViewPager {
    constructor(context: Context?) : super(context!!) {
        setMyScroller()
    }

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

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

代替

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

     init {
         setMyScroller()
     }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM