2016-04-08 22 views
9

とラムダとSAM-コンストラクタの交換しますIntelliJは、SAMコンストラクターをラムダで置き換えることができるという警告を出します。 これは2番目のステートメントになります。は、私は次のJavaインタフェースを持っている共変タイプ

itはタイプAny?であり、Aではないため、この2番目のステートメントはコンパイルされません。 out修飾子を削除すると、再度コンパイルされます。

どうしてですか?

class B : A { 

    override fun go() { 
     TODO() 
    } 
} 

class MainImp : Main() { 
    override fun a(): Test<out A> { 
     val value: Test<B> = object : Test<B> { 
      override fun test(action: Action1<in B>?) { 
       TODO() 
      } 
     }; 

     return value 
    } 
} 

答えて

1

それはコンパイラのバグです:Mainの実装クラスはBAを実装する関数a()、ためを返す必要があるとき


このユースケースはあります。あなたはここで追跡することができます:https://youtrack.jetbrains.com/issue/KT-12238

関連する問題