jfp*_*jfp 6 generics generic-method dart
我正在尝试在Dart(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
}
Run Code Online (Sandbox Code Playgroud)
这两个子类均生成错误,指出to的参数foo是一个Object。
我确定这只是我的语法错误,但是我已经搜索了文档并且找不到答案。
Gün*_*uer 12
您正在做的事情可以在引入泛型方法之前就已经完成,因为您只是在使用类的泛型类型参数。为此,只需删除方法上的类型参数即可解决问题。
泛型方法允许传递专门用于调用站点的方法的类型
class MyClass {
T myMethod<T>(T param) {
prinz(param);
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
new MyClass().myMethod<List<String>>(['a', 'b', 'c']);
Run Code Online (Sandbox Code Playgroud)
泛型方法的类型参数与其类参数类型没有直接关系。
您可以在没有泛型的类上使用泛型方法:
class MyClass {
T add<T>(T f()) => f();
}
Run Code Online (Sandbox Code Playgroud)
您还可以在具有泛型的类上使用泛型方法:
class MyClass<A> {
A aInstance;
// here <T> is needed because unrelated to <A>
T add<T>(T f(A a)) => f(aInstance);
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您不需要方法上的类型参数:
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
}
Run Code Online (Sandbox Code Playgroud)
但是这里不需要泛型方法的概念。
| 归档时间: |
|
| 查看次数: |
4648 次 |
| 最近记录: |