2017-02-02 16 views
1

私はDart(1.22.0-dev.10.3)で汎用メソッドを使用しようとしています。Dartでジェネリックメソッドを作成するには?

abstract class VR<T> { 
    VR(); 

    bool foo<T>(T value); 
} 

class VRInt extends VR<int> { 
    VRInt(); 

    bool foo<int>(int n) => n > 0; // Thinks n is Object 
} 

class VRString extends VR<String> { 
    VRString(); 

    bool foo<String>(String s) => s.length > 0; // Thinks s is Object 
} 

どちらのサブクラスがfooへの引数がオブジェクトであると言うエラーを生成します。ここでは簡単な例です。

これは私のところでは文法上のエラーであると確信していますが、ドキュメントを検索して回答を見つけることができません。

答えて

0

クラスのジェネリック型パラメータを使用しているため、ジェネリックメソッドが導入される前に、あなたは何をしていますか。 この目的のためには、問題を解決するメソッドの型パラメータを削除するだけです。

一般的な方法はありません呼び出しサイトに法を専門とする型を渡すために

class MyClass { 
    T myMethod<T>(T param) { 
    console.log(param); 
    } 
} 

を許可し、その後

new MyClass().myMethod<List<String>>(['a', 'b', 'c']); 
0

ジェネリックメソッドは直接関連していない型パラメータを持つようにそれを使用するようにしていますそのクラスのパラメータ型に変換します。あなたはジェネリックせずにクラスのジェネリックメソッドを持つことができ

class MyClass { 
    T add<T>(T f()) => f(); 
} 

をまた、ジェネリックを使用してクラスの一般的なメソッドを持つことができますあなたの場合は

class MyClass<A> { 
    A aInstance; 
    // here <T> is needed because unrelated to <A> 
    T add<T>(T f(A a)) => f(aInstance); 
} 

を、あなたは「ドンメソッドの型パラメータが必要です。

abstract class VR<T> { 
    VR(); 

    bool foo(T value); 
} 

class VRInt extends VR<int> { 
    VRInt(); 

    bool foo(int n) => n > 0; // Thinks n is Object 
} 

class VRString extends VR<String> { 
    VRString(); 

    bool foo(String s) => s.length > 0; // Thinks s is Object 
} 

ここで必要な汎用メソッドの概念はありません。

関連する問題