3

我想指定用作类字段的函数的签名。这是一个例子:

class Space<PointType>
{
    // num distance(PointType, PointType); This does not work
    final distance; // This works but dystance types are not defined 

    Space(num this.distance(PointType, PointType));     
}

我知道我可以使用 typedef 来定义回调接口。然而,这似乎不适用于泛型。有什么建议么?

4

2 回答 2

4

您可以将泛型与typedef. 在你的情况下:

typedef num ComputeDistance<E>(E p1, E p2);
class Space<PointType> {
  final ComputeDistance<PointType> distance;
  Space(this.distance);
}
于 2013-09-07T16:01:36.070 回答
2

您可以使用 atypedef来声明在类字段中使用的函数的签名。我不完全确定我是否遵循您的具体示例,因此我将保持讨论的通用性。

以下是使用 a 的语法typedef

typedef functionReturnType nameOfTypedef(ParamType paramName);

这是一个具体的例子:

typedef String MyFuncType(int x, int y);

此示例定义MyFuncType返回 aString并采用两个int参数。

class MyClass {
  MyFuncType func; // Matches a func that returns a String and take 2 int arguments.
  ...
}

您可以在https://github.com/dart-lang/cookbook/blob/basics/basics.asciidoc#using-typedef-to-declare-a-function-signature阅读有关使用typedefs的更全面的讨论。

于 2013-09-07T15:53:36.620 回答