【问题标题】:How to get argument from constructor?如何从构造函数中获取参数?
【发布时间】:2019-11-05 15:10:30
【问题描述】:
class AlmatyJobViewModel(application: Application) : AndroidViewModel(application){   

 fun clearSuggestionsHistory(){
            SearchRecentSuggestions(application, MySuggestionsProvider.AUTHORITY, MySuggestionsProvider.MODE)
                .clearHistory()
        }
}

未解决的参考:应用程序

如果我想在这个方法中使用它,如何从构造函数中获取应用程序?

【问题讨论】:

  • 在构造函数中的应用程序之前添加一个“val”:class AlmatyJobViewModel(val application: Application)

标签: android kotlin viewmodel


【解决方案1】:

如果你添加private val application,你会在编译时出现异常

意外覆盖:以下声明具有相同的 JVM 签名

因此,要修复它,您只需在需要的地方致电getApplication()

SearchRecentSuggestions(getApplication(), MySuggestionsProvider.AUTHORITY, MySuggestionsProvider.MODE).clearHistory()

【讨论】:

  • 但为什么我不能从构造函数获取参数??在 Java 中是可能的,但在 Kotlin 中为什么不呢?
  • 这种情况很特殊,因为 kotlin 编译器试图为 AlmatyJobViewModel 类的 private val application 变量创建自己的 getter,但它与在类中声明的相同方法名称 public <T extends Application> T getApplication() 发生冲突public class AndroidViewModel ... 要对其进行测试,请随时将application: Application 重命名为private val application2: Application,您将直接在您喜欢的地方使用,而无需getApplication(),甚至您可以测试它向构造函数添加参数为private valprotected var 和以此类推
猜你喜欢
  • 2016-03-11
  • 1970-01-01
  • 2021-02-18
  • 2021-10-09
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多