gpt4 book ai didi

generics - Typedef函数中的泛型

转载 作者:行者123 更新时间:2023-12-03 03:26:21 24 4
gpt4 key购买 nike

我正在写一个树实用程序,需要能够传递一些匿名函数。我喜欢在可能的地方进行强类型化,并且我知道可以通过使用动力学来实现。

我要创建的typedef将返回models键和parentKey,以便树处理程序可以从平面集合中生成树。

这是我的伪代码:

typedef KeySelector<T> = dynamic Function<T>(T item);


/// The handler for tree structures
class TreeHandler<T> {
/// The items in a flattened structure
final List<T> items;

/// Selector function for an items key
final KeySelector<T> keySelector;

/// Selector function for an items parent key
final KeySelector<T> parentKeySelector;

/// The actual tree the items
/// are converted into
List<TreeNode<T>> tree;

TreeHandler(this.items, this.keySelector, this.parentKeySelector);
}

使用此实用程序的类具有以下初始化代码:
class MyModel {
MyModel({this.id, this.parentId});

int id;
int parentId;
}

_treeHandler = TreeHandler<MyModel>(
null,
<MyModel>(MyModel m) => m.id,
<MyModel>(MyModel m) => m.parentId,
);

在这里,我收到错误消息,说“未为类Object定义 setter/getter ID”。

我尝试了不同的方法来正确地初始化TreeHandler,但是似乎无法正确地进行初始化。

例如,此初始化有效,但不再强类型输入:
_treeHandler = TreeHandler<MyModel>(
null,
<MyModel>(dynamic m) => m.id,
<MyModel>(dynamic m) => m.parentId,
);

我可能会滥用该框架,但我确实希望它可以通过使用泛型来实现。

最佳答案

这对我有用

typedef KeySelector<T> = dynamic Function(T item);

class TreeNode<T> {}

/// The handler for tree structures
class TreeHandler<T> {
/// The items in a flattened structure
final List<T> items;

/// Selector function for an items key
final KeySelector<T> keySelector;

/// Selector function for an items parent key
final KeySelector<T> parentKeySelector;

/// The actual tree the items
/// are converted into
List<TreeNode<T>> tree;

TreeHandler(this.items, this.keySelector, this.parentKeySelector);
}

class MyModel {
MyModel({this.id, this.parentId});

int id;
int parentId;
}

void main() {
var _treeHandler = TreeHandler<MyModel>(
null,
(MyModel m) => m.id,
(MyModel m) => m.parentId,
);
}

我认为主要问题是您有2个具有相同名称的通用参数,其中一个隐藏了另一个
typedef KeySelector<T> = dynamic Function<T>(T item);

这是通用函数的通用typedef,其中 KeySelector<T>为typedef引入了通用参数 T,而 Function<T>为通用函数引入了通用参数 T

更改为
typedef KeySelector<T> = dynamic Function(T item);

解决这个问题。

关于generics - Typedef函数中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com