我知道您可以在正式的arg列表中指定函数类型,但是如何为实例变量执行此操作?我想这样做:
class A<T> {
int compare(T a, T b);
}
其中compare是具有适当类型的函数变量。我希望能够写下:
A a = new A();
a.compare = ...
答案 0 :(得分:9)
您可以使用typedef
:
typedef Comparison<T> = int Function(T a, T b);
class A<T> {
Comparison<T> compare;
}
main() {
A a = new A<int>();
a.compare = (int a, int b) => a.compareTo(b);
print(a.compare(1, 2));
}
答案 1 :(得分:2)
库function_types
通过typedef定义具有不同Arity的函数类型。
import 'package:function_types/function_types.dart';
void main() {
Func2<int, int, int> mul = (int a, int b) => a * b;
print(mul(3, 2));
add = (int a, int b) => a + b;
print(add(3, 2));
}
Func2<int, int, int> add;
您可以使用以下代码:
import 'package:function_types/function_types.dart';
void main() {
var a = new A<String>();
a.compare = (String a, String b) => a.compareTo(b);
print(a.compare("A", "B"));
}
class A<T> {
Func2<T, T, int> compare;
}