Dart 中的非泛型 class 中的泛型 field/method

Generic field/method in non-generic class in Dart

在 Dart 中,是否有可能在非泛型 class 中使用泛型方法,如在 Java 中?

我使用 Getx 进行状态管理、DI 和路由,但这个问题并不特定于 Getx 或 Flutter。

AuthService 处理身份验证并设置登录用户,例如 Rxn<AppUser>。我有 3 种类型的用户:Customer extends AppUserSeller extends AppUserAdmin extends AppUser

我想将 user observable 更改为如下所示:Rxn<? extends AppUser> currentUser = Rxn()

我尝试了以下语法,但没有用。

class AuthService extends GetxService {
  T Rxn<T extends AppUser> currentUser = Rxn();
  ...
}

直接回答我的问题: Dart 也支持泛型类型的继承(不像 Java)。所以,Rxn<AppUser> currentUser = Rxn<Patient>() 在 Dart 中是可能的。我不需要通配符或任何。感谢@jamesdlin 的 answer/comments.

您可以使用泛型方法。您将以与声明通用函数相同的方式声明它们:

class Foo {
  String key;

  Foo(this.key);

  Map<String, T> f<T>(T value) => <String, T>{key: value};
}

但是,拥有通用字段没有意义。一个字段代表一个数据成员;当类型未知时,将存储什么数据以及存储在哪里?您是否会为 T 的每个可能值存储无限数量的数据成员?