首页 > 解决方案 > Dart 隐式复合泛型?

问题描述

考虑以下:

class ModularRoute<TPageParameters extends PageParameters,
        TModularPage extends ModularPage<TPageParameters>>
    extends BaseModularRoute<TPageParameters, TModularPage> {
  ModularRoute({
    required BaseModule module,
    required String route,
    required TModularPage Function(Map<String, String?> params) createPage,
    FutureOr<bool> Function(
      ModularHistory route,
      ModularRouterDelegate delegate,
    )?
        guard,
    bool overrideModuleGuard = false,
  }) : super(
          module: module,
          route: route,
          createPage: createPage,
          guard: guard,
          overrideModuleGuard: overrideModuleGuard,
        );

要实际构建它,我必须每次都定义泛型的两个参数。IE:

ModularRoute<SomePageParameter, SomeModularPage>(...);

Dart 中有没有办法以复合方式定义它,以便参数泛型由 ModularPage 的泛型类型定义?即我很想这样定义它:

class ModularRoute<TModularPage extends ModularPage<TPageParameters extends PageParameters>> {
   ...
}

并完成。

这当然行不通,但我在 Dart 中经常遇到这个问题,它无缘无故地创建了冗长的代码,因为编译器应该能够轻松地推断出所涉及的泛型类型,然后使用它们。

标签: dart

解决方案


不。

如果你的类依赖于两个类型参数,它需要声明两个独立的类型参数。没有办法隐式地从另一种类型中挑选出其中一种类型。如果它需要名称,则必须将其设为实际参数。


推荐阅读