[英]How to call private constructor of super class from child class constructor?
[英]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.