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)。有没有办法绕过这个问题?