2017-04-13 15 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にはinsert、save、deleteなどのメソッドがあります。RepositoryTestでこの抽象化を使用して、すべてのエントリを削除し、各テストの前に必要なデータを挿入します。 UserRepositoryTest私はUserRepository(それはRepositoryの子です)としてリポジトリを指定したいと思いますが、この例ではエラーが発生します。
なぜ私にエラーが出るのですか?私はサブタイプの型を渡すことができると思った。

答えて

3

repositoryは、varフィールドです。 UserRepositoryTestRepositoryTest<User, Long>と表示されるので、repositoryフィールドにRepository<User, Long>を割り当てることができます。しかし、それはUserRepositoryである必要はないので、エラーです。

repositoryからvalRepositoryTestクラスに変更すると修正されるはずです。

関連する問題