很抱歉没有特定的标题,我真的不知道如何更好地命名 我有以下示例:
class User
interface Repository<T, ID>
interface UserRepository : Repository<User, Long>
abstract class RepositoryTest<T, ID> {
abstract var repository: Repository<T, ID>
}
class UserRepositoryTest : RepositoryTest<User, Long>() {
//Error: Var-property type is "UserRepository", which is not a type of overriden
lateinit override var repository: UserRepository
}
我需要这种架构进行数据库测试。 Repository
有插入,保存,删除等方法。我想在RepositoryTest
中使用此抽象来删除所有条目并在每次测试之前插入所需的数据。在UserRepositoryTest
我想将存储库指定为UserRepository
(它是Repository
的孩子),但我接受了示例中提到的错误。
为什么会给出我的错误?我以为我可以通过子类型。
答案 0 :(得分:6)
repository
是var
字段。由于UserRepositoryTest
可以称为RepositoryTest<User, Long>
,因此您应该可以将Repository<User, Long>
分配给repository
字段。但是,它不一定是UserRepository
因此错误。
在repository
课程中将val
更改为RepositoryTest
应修复此问题。