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
相关产品推荐
相关产品推荐

