2016-12-07 15 views
2

いくつかのクラス階層があり、戻り型がthis.runtimeTypeである基本クラス・メソッドで実装する必要があります。 Javaでは、汎用パラメータclass Base extends <This extends Base<This>>を使用して行います。 この汎用型

class A<This extends A<This>> { 
    This copy() => //... 
} 
class B extends A<B> {} 

A a = new A(); // ok 
A ab = new B(); // ok 
B b = new B(); // ok 

しかし、あなたはありません抽象的でない親クラス持ちながら:ダートでは、それはあまりにも正常に動作します

A a2 = new A().copy(); // Unsound implicit cast from A<dynamic> to A<A<dynamic>> 

そしてもちろんのを、私たちはここで明示的にするために、一般的なパラメータを指定することはできません - それは再帰的です。それは一種のバグでしょうか、それともダーツでそれを行う別の方法ですか?

答えて

4

これは強力なモードでは欠けている機能だと思います。

は私だけ

analyzer: 
    strong-mode: 
    implicit-casts: false 

でエラーを取得し、これは長すぎない前に追加されました。

DartPadStrong modeを有効にしてもエラーはありません。

+0

ダーツアナライザバージョン1.20.1、警告: 'analyzer:strong-mode:true'のみ。 –

+0

強いモードが進行中です。 –

+1

でも、それはダーツキラー機能の一つです、私は思う:) –