You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何创建子类引用列表并实现后续实例化?

解决Dart中创建子类引用列表并实例化的问题

你的代码无法运行的原因是:直接把Dog、Cat这些类型(Type对象)放进列表,Type本身没有可调用的构造方法,所以E()会报错。要实现需求,你需要把能创建Animal实例的构造函数存入列表,而不是类型本身。

修正后的代码

import 'package:flutter_test/flutter_test.dart';

abstract class Animal{
  abstract String sound;
}

class Dog extends Animal{
  @override
  String sound = "woaf";
}

class Cat extends Animal{
  @override
  String sound = "meow";
}

void main() {
  test('Subclasses', () {
    // 明确指定列表类型为返回Animal的函数类型,存入构造函数引用
    final List<Animal Function()> animalConstructors = [Dog.new, Cat.new];
    animalConstructors.forEach((constructor) { 
      final animal = constructor();
      print(animal.sound); // 正常输出 woaf 和 meow
    });
  });
}

关键说明

  • Dog.new是Dart中引用类构造函数的语法,等价于() => Dog(),它是一个返回Animal实例的函数。
  • 列表类型声明List<Animal Function()>确保存入的元素都是符合要求的构造函数,避免类型错误。
  • 遍历列表时,调用每个构造函数就能得到对应的子类实例,进而访问sound属性。

内容的提问来源于stack exchange,提问作者justcodin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:27:07