Avatar ·

Room中“Cannot find setter for field”错误的Kotlin原因与解决方案

大家好!我是Kotlin新手,正在尝试使用Room进行本地数据存储。我有一个简单的User实体: ```kotlin @Entity(tableName = "users") data class User( @PrimaryKey val id: Int, val name: String, val age: Int ) ``` 以及DAO: ```kotlin @Dao interface UserDao { @Insert suspend fun insert(user: User) @Query("SELECT * FROM users WHERE id = :id") suspend fun getUser(id: Int): User? } ``` 但当我运行应用时,遇到了错误: ``` Cannot find setter for field - User.name ``` 我了解到Room需要字段的setter,但我的类是data class——它们应该自动生成。问题可能出在哪里?我使用的是Room 2.5.0和Kotlin 1.8.0。我的Gradle文件配置了kapt,注解似乎也已正确引入。请指教,我哪里做错了? 另外,如果我将val改为var,错误就会消失。但我希望字段是不可变的(immutable)。有没有办法绕过这个问题?