Classifier 没有伴生对象,因此必须在这里初始化

Posted

技术标签:

【中文标题】Classifier 没有伴生对象,因此必须在这里初始化【英文标题】:Classifier does not have a companion object, and thus must be initialized here 【发布时间】:2019-04-27 18:46:19 【问题描述】:

我有一个声明了接口的 Activity,我有一个 ViewModel 类,该类具有重写的接口,并希望从 Activity 调用接口的方法以在 ViewModel 类中进行更改,但无法调用其中的方法ActivityViewModel 类没有伴生对象,因此必须在这里初始化。如何解决?

var selection: setSelectionSubRow? = null
    selection=RowSubTShirtViewModel
    selection!!.setNameSelection(false)

上面的代码在Activity,它的名字是TShirtActivity

以下代码来自RowViewModel

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

fun getImageDrawable(): Drawable 
    return if (tShirtBean.isSelected)
        ContextCompat.getDrawable(context, R.drawable.green_border_circle)!!
    else
        ContextCompat.getDrawable(context, R.drawable.border_circle)!!


override fun setNameSelection(selection: Boolean) 
    if (parentPosition == 6) 
        if (position == 1) 
            tShirtBean.isSelected = false
        
    

【问题讨论】:

【参考方案1】:

就我而言,我在ApplicationModule 中为dagger2 收到此错误。

@Provides
@Singleton

 internal fun providesxx(xx: xxx): xx 
        return xx
    

我只是重命名参数!

【讨论】:

【参考方案2】:

这一行selection=RowSubTShirtViewModel 引用视图模型,就好像它是一个命名对象,这意味着您应该编写而不是类对象:

object RowSubTShirtViewModel 
   //...

但是,既然情况并非如此,kotlin 会告诉您不能那样引用它,必须对其进行初始化。构造函数有很多参数让我猜测它们是什么,但本质上你必须将它们传递进去:

selection=RowSubTShirtViewModel(/*parameters here*/)

【讨论】:

我明白你的意思。但其他问题必须面对,实际上这个RowSubTShirtViewModel subAdapter类的viewmodel,它在ActivityViewModel类中使用,activity中有一个dialog,在@987654331 @ on button click 我想反向选择RecycleView 项目和RowSubTShirtViewModelviewModel 的匹配者@ 987654335@,所以我如何管理RowSubTShirtViewModel 的构造函数在Acitivty 这只是一个经典的依赖问题。你只是继续传递一切,直到你拥有你需要的一切。例如,如果您在适配器中构造RowSubTShirtViewModel,它在活动中使用,那么您可以在实例化适配器时传递活动,然后在实例化RowSubTShirtViewModel 时传递它。还有其他使用依赖注入框架的方法,例如 Dagger。我真的不能告诉你什么最适合你,但你遇到的问题总是会导致不得不构建RowSubTShirtViewModel 谢谢 Fred 我会看看这两个解决方案。

以上是关于Classifier 没有伴生对象,因此必须在这里初始化的主要内容,如果未能解决你的问题,请参考以下文章

Scala伴生对象

在 kotlin 中命名伴生对象有啥意义

Scala编程之伴生对象

每天学一点Scala之 伴生类和伴生对象

面向对象:对象

scala伴生类和伴生对象的理解