2016-12-18 23 views
4

の即時のサブタイプIは、以下のような抽象クラスを持っているために許可されていません。投影スーパー

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

私はこれを継承する別の抽象クラスたい:CascadedSyncクラス

abstract class CascadedSync : AbstractSync {} 

をすべきです一般的なパラメータCを変更しないでください。実際には、ISyncの1つのメソッドしか実装していません。

私はこの一見単純な作業を達成するために異なる構文を試しています。 Javaでは、これは単に次のようになりますのIntelliJの助けを借りてKotlinにそれを翻訳

abstract class CascadedSync extends AbstractSync {  
} 

この生成:

abstract class CascadedSync : AbstractSync<*>() 

しかし同時に、次のエラーが発生します

スーパータイプの直接のサブタイプには投影を許可しません。

正しい構文は何ですか? Kotlinで

答えて

6

は、Javaのとは異なり、型パラメータが暗黙のうちに自分のサブタイプに種類からコピーされていないと、あなたがそれらを変更しない場合でも、彼らは、サブタイプ宣言で再宣言する必要があります。

abstract class CascadedSync<out C : Configuration<*>> : AbstractSync<C>() { 
    // ... 
}