电力建设期刊网站经常维护吗,wordpress发号系统,网站多少流量够用,广东哪有做网赌网站我无法解决看似微不足道的问题。我的问题可能是缺乏对Kotlin语言的经验(和理解)。不过#xff0c;我将需要帮助。我做了一个自定义类#xff0c;其中包含一个自定义函数。看起来很简单#xff0c;但是当我尝试使用此功能时#xff0c;我一直收到未解决的引用错…我无法解决看似微不足道的问题。我的问题可能是缺乏对Kotlin语言的经验(和理解)。不过我将需要帮助。我做了一个自定义类其中包含一个自定义函数。看起来很简单但是当我尝试使用此功能时我一直收到未解决的引用错误。这段示例代码再现了错误abstract class Test {private var test: Test? nullfun getBla(): Test? {return test}fun shout() {println(Whaaaaa!)}}fun main(args: Array) {val tst Test.getBla()tst.shout()}错误显示为Unresolved reference: getBla此类可能没有太多意义但它旨在模仿我在应用程序中使用的实际类的结构。我觉得我在犯一个可怕的菜鸟错误。我搜索了Stackoverflow和Kotlin文档但似乎找不到解决方案。我通过简单地替换 hello world示例在try.kotlinlang.org上测试了上述代码。####编辑恐怕我尝试构建的应用程序的上下文可能毕竟很重要。我正在尝试实现一个Room数据库但是我能找到的最清晰的教程是针对Java的因此我试图进行翻译这使我遇到了麻烦。这是我当前正在关注的页面房间数据库。我需要将 Test类设为单例这就是 getBla()的实际内容所针对的。为了解决实际问题这是实际类现在的样子Database(entities [(Box::class)], version 1)abstract class BoxRoomDatabase : RoomDatabase() {abstract fun boxDao(): BoxDaoprivate var boxRoomDatabase: BoxRoomDatabase? nullfun getDatabase(context: Context): BoxRoomDatabase? {if (boxRoomDatabase null) {//Double colon allows to get the Java class instead of a KClass, which is not equivalentsynchronized(BoxRoomDatabase::class.java) {boxRoomDatabase Room.databaseBuilder(context.applicationContext,BoxRoomDatabase::class.java,box_database).build()}}return boxRoomDatabase}}因此BoxRoomDatabase必须是单例。问题来自将Java代码自动翻译成Kotlin。看来这种情况有点太复杂了。我试图通过搜索科特林单身和抽象方法的各种组合来找到答案。最终我偶然发现了这个博客有论点的Kotlin单身人士。我需要的是一个单调的论点这显然不是科特林要做的一件小事。该博客介绍了如何实现这种构造。现在我的代码至少可以编译如果它确实执行了我想要的操作我将在以后找到。我当前的实现有点像这样SingletonHolder.kt(构建带有参数的单例)open class SingletonHolder(creator: (A) - T) {private var creator: ((A) - T)? creatorVolatile private var instance: T? nullfun getInstance(arg: A): T {val i instanceif (i ! null) {return i}return synchronized(this) {val i2 instanceif (i2 ! null) {i2} else {val created creator!!(arg)instance createdcreator nullcreated}}}}BoxRoomDatabase.ktimport android.arch.persistence.room.RoomDatabaseimport android.arch.persistence.room.Databaseimport android.content.Contextimport android.arch.persistence.room.RoomDatabase(entities [(Box::class)], version 1)abstract class BoxRoomDatabase : RoomDatabase() {abstract fun boxDao(): BoxDaoprivate var boxRoomDatabase: BoxRoomDatabase? nullcompanion object : SingletonHolder({Room.databaseBuilder(it.applicationContext,BoxRoomDatabase::class.java,box_database).build()})}BoxRepository.ktclass BoxRepository internal constructor(application: Application) {private val mBoxDao: BoxDaoprivate val mAllBoxes: LiveDatainit {mBoxDao BoxRoomDatabase.getInstance(application).boxDao()mAllBoxes mBoxDao.getAllBoxes()}fun getAllBoxess(): LiveData {return mAllBoxes}fun insert(box: Box) {InsertAsyncTask(mBoxDao).execute(box)}private class InsertAsyncTask internal constructor(private val mAsyncTaskDao: BoxDao) : AsyncTask() {override fun doInBackground(vararg params: Box): Void? {mAsyncTaskDao.insert(params[0])return null}}}即使可以编译也可能不是执行此操作的最佳方法。如果有人对上述代码的结构有任何输入请随时分享您的输入。val tst Test.getBla()它可能表示您正在尝试在Test.Companion上调用getBla()这意味着您试图将其作为静态方法(Java)进行调用。abstract class Test {companion object {fun getBla(): Test? ...但是您并不想这样做所以您可能应该实例化正在调用方法的类。 这是一个抽象类因此您需要匿名实现。fun main(args: Array) {val test object: Test() {}val bla test?.getBla()bla?.shout()}从技术上讲您也不需要fun getBla()因为您可以将属性与私有设置程序一起使用。var bla: Test? nullprivate set现在您可以以val bla test.bla谢谢。 我不明白为什么如果我只是简单地尝试调用存在于类 Test.getBla()中的方法那么它可能说您试图在Test.Companion上调用getBla()。 也许你可以详细说明 同时我也继续使用您的输入进行搜索并且我可能已经找到了针对我的特定实现的解决方案。 我即将发布更新。您是在类的伴随对象上而不是在类的实例上调用方法。 基本上您希望将其称为静态方法(Java术语)