2017-02-02 2 views
1

다트 (1.22.0-dev.10.3)에서 일반적인 방법을 사용하려고합니다.다트에서 일반 메소드를 만드는 방법은 무엇입니까?

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 
} 

그러나 여기에 필요한 일반 메서드 개념이 없습니다.

관련 문제