Dart非泛型类能否定义泛型字段/方法?Rxn泛型继承使用疑问
1. Dart非泛型类是否支持定义泛型方法
Dart完全支持在非泛型类中定义泛型方法,规则与Java一致,只需在方法声明时提前声明泛型参数即可,示例如下:
class AuthService extends GetxService { // 泛型方法示例:按需返回指定类型的用户实例 T? getCurrentUser<T extends AppUser>() { if (currentUser.value is T) { return currentUser.value as T; } return null; } }
2. 无需通配符的泛型赋值方案是否可行
该方案完全可行,原因如下:
- Dart泛型默认是协变的,和Java泛型默认不变、需要通配符手动声明协变的规则不同,
Rxn<AppUser>类型的变量天然可以接收Rxn<Customer>、Rxn<Seller>、Rxn<Admin>等子类泛型的实例,不需要额外的通配符语法 - 你之前错误写法的问题在于:Dart不支持普通类成员变量单独声明泛型参数,泛型参数只能在类级别、或者方法级别声明
- 正确的声明写法就是你查询到的版本:
class AuthService extends GetxService { Rxn<AppUser> currentUser = Rxn<Customer>(); // 完全合法 // 也可以后续赋值其他子类泛型的Rxn实例 void switchAdminAccount() { currentUser = Rxn<Admin>(); } }
如果需要对用户类型做更严格的编译期校验,也可以选择将泛型声明提升到类级别:
// 类级别泛型方案 class AuthService<T extends AppUser> extends GetxService { Rxn<T> currentUser = Rxn<T>(); } // 实例化时指定对应用户类型 final customerAuth = AuthService<Customer>(); final sellerAuth = AuthService<Seller>();
内容的提问来源于stack exchange,提问作者manikanta
相关产品推荐
相关产品推荐

