java - 调用 super 会抛出“super 不是表达式”
问题描述
我在这里学习从 Google 指南中实现 MVVM:
https ://codelabs.developers.google.com/codelabs/android-room-with-a-view/#8 (特别是我感兴趣的页面的发布链接) .
因为我了解用 Java 实现它,所以我决定改用 Kotlin。在类扩展中初始化构造函数时,AndroidViewModel
我需要调用super
它,它会引发以下错误:
"super' 不是一个表达式,它只能用在点的左侧 ('.')"
当我用谷歌搜索并找到类似的主题时,但我根本不明白,所以我没有解决我的问题。这是我的ViewModel
课程代码:
class NotesViewModel private constructor(application: Application) : AndroidViewModel(application){
var mRepository: NotesRepository? = null
var mAllNotes: LiveData<List<Notes>>? = null
init {
super(application) // <-- here it throws me an error
mRepository = NotesRepository(application)
mAllNotes = mRepository!!.getAllWords()
}
fun getAllNotes(): LiveData<List<Notes>>{
return mAllNotes!!
}
fun insert(notes: Notes){
mRepository!!.insert(notes)
}
}
那么,我应该如何正确调用super,构造一个构造函数呢?这是此类的正确 java 代码:
public class WordViewModel extends AndroidViewModel {
private WordRepository mRepository;
private LiveData<List<Word>> mAllWords;
public WordViewModel(Application application) {
super(application);
mRepository = new WordRepository(application);
mAllWords = mRepository.getAllWords();
}
LiveData<List<Word>> getAllWords() {
return mAllWords;
}
void insert(Word word) {
mRepository.insert(word);
}
}
解决方案
你已经在这里调用了 super :NotesViewModel private constructor(application: Application) : AndroidViewModel(application)
另一个问题是你的构造函数是private
只需制作它public
并从中删除super
呼叫init()
推荐阅读
- postgresql - 如何按计划更新 Elasticsearch 中的数据?
- javascript - 如何在字符串中的url之后提取文本?
- html - Bootstrap 4:在 MS Edge 中是否有针对粘性边界的错误抗锯齿的修复/解决方法
- sql-server - SSIS 错误:连接管理器尚未分配给 Excel
- bash - 在 Bash 中找到两个数字的最大公约数
- docker - 如何启动一个 nginx Docker 容器?
- c# - 通过 id 移动邮件列表的邮件
- mysql - MySQL 5.7 存储过程
- jaxb - 声纳图集成 - 无法初始化 JAXB
- javascript - Google Chrome 硬件加速/css 缩放导致合成错误