Dart中是否存在类似C#的new()、factory()类型的泛型约束?
Dart 泛型构造函数约束相关解答
Dart 目前没有和 C# 中 new()、factory() 对等的内置泛型约束语法,你无法直接在定义泛型参数时,直接限制该类型必须包含某个构造函数(无论是普通默认构造函数还是工厂构造函数)。
- Dart 原生的泛型约束仅支持类型继承关系限制,比如你可以写
class SuperDog<T extends Animal>来要求泛型参数 T 必须是 Animal 的子类,但没有针对构造函数的限制规则。核心原因是 Dart 中的构造函数、静态方法都不属于类型的公开接口,泛型约束只能限制类型的实例成员匹配要求,没法约束静态层面的逻辑。 - 如果你需要实现类似「通过泛型类型生成对应实例」的需求,通用的替代方案是额外传入一个构造函数回调参数,而非依赖原生泛型约束,示例代码如下:
class SuperDog<T> { // 传入实例生成回调 final T Function() creator; SuperDog(this.creator); T getInstance() => creator(); } class Snoopy { factory Snoopy() { return Snoopy._internal(); } Snoopy._internal(); } void main() { // 使用时传递对应构造函数即可 final superDog = SuperDog<Snoopy>(() => Snoopy()); final snoopy = superDog.getInstance(); }
这种方案的灵活性比 C# 的构造函数约束更高,你不仅可以传递无参默认构造函数,还可以传递带参数的构造函数、甚至自定义的实例生成逻辑,可适配的场景更多。
内容的提问来源于stack exchange,提问作者HotFlow
相关产品推荐
相关产品推荐

