属性类型不是一种覆盖

时间:2017-04-13 10:36:01

标签: kotlin

很抱歉没有特定的标题,我真的不知道如何更好地命名 我有以下示例:

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的孩子),但我接受了示例中提到的错误。
为什么会给出我的错误?我以为我可以通过子类型。

1 个答案:

答案 0 :(得分:6)

repositoryvar字段。由于UserRepositoryTest可以称为RepositoryTest<User, Long>,因此您应该可以将Repository<User, Long>分配给repository字段。但是,它不一定是UserRepository因此错误。

repository课程中将val更改为RepositoryTest应修复此问题。