dart - 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 中经常遇到这个问题,它无缘无故地创建了冗长的代码,因为编译器应该能够轻松地推断出所涉及的泛型类型,然后使用它们。
解决方案
不。
如果你的类依赖于两个类型参数,它需要声明两个独立的类型参数。没有办法隐式地从另一种类型中挑选出其中一种类型。如果它需要名称,则必须将其设为实际参数。
推荐阅读
- php - Faker laravel 未知格式化程序图像
- node.js - 带有express的NodeJS,无法加载模型
- asp.net-mvc - 无法为我的新项目创建新控制器
- pointers - ARM 汇编程序子程序指针
- postgresql - PostgreSQL 的 Liquibase BRIN 和 HASH 索引?
- php - PHP版本检查
- c# - 如何告诉 Swagger 不要将输入类中的某些字段显示为参数?
- vuejs2 - 如何在使用 vue-cli3 创建的 Vue2 项目中使用 axios
- javascript - 通过 UID 定位对象的递归 JavaScript 函数
- mysql - 连接到多个mysql数据库时连接初始化顺序很重要的可能原因