2016-12-18 1 views
4

У меня есть абстрактный класс, как следующее:проекции не допускается непосредственных подтипов надтипа

abstract class AbstractSync<out C : Configuration<*>> : ISync { 
    internal abstract val configuration: C 
    ... 
} 

Я хочу, чтобы другой абстрактный класс, который наследуется от этого:

abstract class CascadedSync : AbstractSync {} 

Класс CascadedSync должен не изменять общий параметр C, он должен, по сути, реализовать только один метод ISync и ничего больше.

Я пытаюсь использовать различные синтаксисы для достижения этой, казалось бы, простой задачи. В Java это будет выглядеть так же, как это:

abstract class CascadedSync extends AbstractSync {  
} 

Переводя его Котлин с помощью IntelliJ производит это:

abstract class CascadedSync : AbstractSync<*>() 

Но в то же время дает следующее сообщение об ошибке:

выступы не допускаются для немедленных подтипов супертипа

Каков правильный синтаксис?

ответ

6

В Котлин, в отличие от Java, параметры типа не неявно копируются из типов их подтипов и, даже если вы не измените их, они должны быть повторно объявлен в объявлении подтипа:

abstract class CascadedSync<out C : Configuration<*>> : AbstractSync<C>() { 
    // ... 
} 
Смежные вопросы