java - 如何从 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()
从辅助构造函数调用?
解决方案
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
调用。
推荐阅读
- javascript - Javascript [[BoundThis]] 值
- c# - 从 SignalR 请求中检索不记名 jwt 令牌
- java - 如何从 JAVA 向 Splunk Enterprise 发送 JSON 文件?
- r - 使用 LDAP https 身份验证连接 R 和 Presto
- python - 使用 pandas 对分层数据 [Parent->Child] 树进行有效分组
- php - 为什么我会在 php 中得到小于/大于条件的错误结果?
- c++ - 为什么 STL 优先级队列错误地对我的类对象进行排序
- python - CatBoost 中的错误?CatBoostClassifier 不适用于 sklearn 的 CalibratedClassifierCV
- angular - 如何从订阅错误块中的减速器获取错误
- php - 根据 twilio 数据库中的号码拨打多个号码