Android 构造函数中的默认值显示Kotlin中的错误

Android 构造函数中的默认值显示Kotlin中的错误,android,mvvm,kotlin,Android,Mvvm,Kotlin,我做的和从和一样,但显示错误 这是我的类,它的主构造函数没有次构造函数noinit块 class RowSubTShirtViewModel(private val subTShirtAdapter: SubTShirtAdapter, val context: TShirtActivity, val tShirtBean: CommonItemBean, private val parentPosition: Int, private v

我做的和从和一样,但显示错误

这是我的类,它的
主构造函数
没有
次构造函数
no
init

class RowSubTShirtViewModel(private val subTShirtAdapter: SubTShirtAdapter, val context: TShirtActivity,
                            val tShirtBean: CommonItemBean, private val parentPosition: Int, private val position: Int) : BaseObservable(), TShirtActivity.setSelectionSubRow {}
创建对象,如
val vm=RowSubTShirtViewModel()
giving error

  • 创建抽象函数“RowSubShirtViewModel”
  • 创建函数“RowSubShirtViewModel”
  • 创建二级构造函数
  • 没有为参数传递值

您需要显式地将参数传递给主构造函数:

//init params
val subTShirtAdapter = ...
val context = ...
val tShirtBean = ...
val parentPosition = ...
val position = ...

//init viewModel
val vm = RowSubTShirtViewModel(subTShirtAdapter, context, tShirtBean, parentPosition, position)
除非为参数指定默认值,例如:

class RowSubTShirtViewModel(private val subTShirtAdapter = YourAdapter(),...)
在您的情况下,您可以这样做:

class RowSubTShirtViewModel(val context: TShirtActivity, 
    private val subTShirtAdapter: SubTShirtAdapter, 
    val tShirtBean: CommonItemBean, 
    private val parentPosition: Int = 0, 
    private val position: Int = 0) : BaseObservable(), TShirtActivity.setSelectionSubRow {}

// and then create an instance
val vm = RowSubTShirtViewModel(yourContext, yourAdapter, yourShirtBean)

您需要显式地将参数传递给主构造函数:

//init params
val subTShirtAdapter = ...
val context = ...
val tShirtBean = ...
val parentPosition = ...
val position = ...

//init viewModel
val vm = RowSubTShirtViewModel(subTShirtAdapter, context, tShirtBean, parentPosition, position)
除非为参数指定默认值,例如:

class RowSubTShirtViewModel(private val subTShirtAdapter = YourAdapter(),...)
在您的情况下,您可以这样做:

class RowSubTShirtViewModel(val context: TShirtActivity, 
    private val subTShirtAdapter: SubTShirtAdapter, 
    val tShirtBean: CommonItemBean, 
    private val parentPosition: Int = 0, 
    private val position: Int = 0) : BaseObservable(), TShirtActivity.setSelectionSubRow {}

// and then create an instance
val vm = RowSubTShirtViewModel(yourContext, yourAdapter, yourShirtBean)
您没有在构造函数中使用。如果您喜欢使用,它应该看起来像

class RowSubTShirtViewModel(
    private val subTShirtAdapter: SubTShirtAdapter = defaultSubTShirtAdapter,
    val context: TShirtActivity = defultContext,
    val tShirtBean: CommonItemBean = defaultTShirtBean,
    private val parentPosition: Int = defaultParentPosition,
    private val position: Int = defaultPosition) : BaseObservable(), TShirtActivity.setSelectionSubRow {}
您没有在构造函数中使用。如果您喜欢使用,它应该看起来像

class RowSubTShirtViewModel(
    private val subTShirtAdapter: SubTShirtAdapter = defaultSubTShirtAdapter,
    val context: TShirtActivity = defultContext,
    val tShirtBean: CommonItemBean = defaultTShirtBean,
    private val parentPosition: Int = defaultParentPosition,
    private val position: Int = defaultPosition) : BaseObservable(), TShirtActivity.setSelectionSubRow {}

我完全按照教程和答案所说的去做。您能解释一下我哪里做错了吗?您刚刚错过了分配默认参数,请参阅我编辑的答案。如果我按顺序排列参数,并且上下文优先,那么就可以了。但在您的情况下,我认为没有理由使用默认参数创建RowSubShirtViewModel,因为它们应该在顶层初始化(其中创建了RowSubShirtViewModel的实例)顶层是什么意思?我完全按照教程和答案所说的去做。你能解释一下我哪里做错了吗?你刚刚错过了指定默认参数,请看我编辑的答案。如果我按顺序排列参数,上下文放在第一位,那就可以了。但在你的情况下,我认为没有理由创建RowSubShirtViewMo使用默认参数del,因为它们应该在顶层初始化(在顶层创建RowSubShirtViewModel实例)顶层是什么意思?如果我按顺序排列参数,而上下文是第一个,那么就可以了。我为该类创建了默认参数函数,没有显示编译时错误,但在运行时显示KNP。我的目标是从活动调用接口方法,该类已实现接口。如果我按顺序排列参数,则xt将是第一个,然后就可以了。我为该类创建了默认参数函数,没有显示编译时错误,但在运行时显示KNP。我的目标是从活动调用接口方法,该类已实现该接口。亲爱的@farhana,关于,请注意,堆栈溢出有一个关于的策略,甚至有一个预定义的注释要处理此类情况,请参阅亲爱的@farhana,关于,请注意,堆栈溢出有一个策略,甚至有一个预定义的注释来处理此类情况。请参阅