2017-04-13 59 views
1

對不起,沒有具體的標題,我真的不知道如何更好地命名它。
我下面舉個例子:物業類型不是一種重寫

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的孩子),但我在示例中提到了一個錯誤。
爲什麼它給我錯誤?我想我可以通過一個亞型的類型。

回答

3

repositoryvar字段。由於UserRepositoryTest可以稱爲RepositoryTest<User, Long>,因此您應該可以將Repository<User, Long>分配給repository字段。但是,它不一定是UserRepository因此是錯誤。

更改repositoryvalRepositoryTest類應該修復它。