使用亚型功能调用DART通用功能
我不确定这是否可能是可能的,但这是我的设置:
我基本上有2张拿着特殊标识符来获取某些对象的地图。 这些标识符就像一个版本的编号,我可能在属于Meta版本5的版本8中具有数据。但是,与此同时,元版本最多可能存在10个,并且并非每个元版本都包含有关每个数据的信息,因此这里是_ filter启动。
该过滤器能够找到任何给定值正确的对象。到目前为止,一切都很好。
我的问题属于以下内容:(最后代码) 我怎么能说“如果您没有匹配的候选人,请给我产生默认值” 为此,我试图强制一个名为“数据”和“ META”的超级类的命名构造函数,称为“基本信息”。 但是,即使我实现了这一点,我如何称呼t.NamedConstructor()之类的东西; ?
class Repo{
Map<int, Data> mapData;
Map<int, Meta> mapMeta;
Data getData(int value)
{
return _filter<Data>(mapData, value);
}
Meta getMeta(int value)
{
return _filter<Data>(mapMeta, value);
}
T _filter<T extends BasicInformation>(Map<int, T>, int value)
{
//fancy filtering technique
//....
//speudo code
if (found) return map[found]; //speudo code
else return T.generateDefault();
}
}
I am not sure if this is even possible but here's my setup:
I have basically 2 Maps holding a special identifier to get some objects.
these identifier is like a versioning number, i may have data in version 8 that belongs to meta version 5. But at the same time, Meta versions up to 10 may exist and not every meta version holds information about every data, so here's where the _filter kicks in.
The filter is able to find to any given value the correct object. So far so good.
My question belongs to the following: (last codeline)
how am i able to say "if you have no matching candidate, generate me a default value"
For this purpose, i tried to force a named constructor with a super class for "Data" and "Meta" called "BasicInformation".
But even if i implement this, how do i call something like T.namedConstructor(); ?
class Repo{
Map<int, Data> mapData;
Map<int, Meta> mapMeta;
Data getData(int value)
{
return _filter<Data>(mapData, value);
}
Meta getMeta(int value)
{
return _filter<Data>(mapMeta, value);
}
T _filter<T extends BasicInformation>(Map<int, T>, int value)
{
//fancy filtering technique
//....
//speudo code
if (found) return map[found]; //speudo code
else return T.generateDefault();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我找到了以下stackoverflow条目:通用类型的呼叫方法dart dart
这说明,如果不添加函数调用,这是不可能的。
I've found the following stackoverflow entry: Calling method on generic type Dart
which says, this is not possible without adding a function call.