使用亚型功能调用DART通用功能

发布于 2025-02-06 00:50:00 字数 857 浏览 3 评论 0原文

我不确定这是否可能是可能的,但这是我的设置:

我基本上有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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难愈 2025-02-13 00:50:01

我找到了以下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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文