防止dart泛型接受自身的列表

zte4gxcn  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(41)

我有一个constructor:

PuzMat.fromMatrix(List<List<T>> data) {
  _layers.add(data);
}

字符串
我错误地传递了一个List<List<List<T>>>,它就吞了它。我想防止这种情况发生,但是如果我检查类型,我的编辑器说它总是假的。我在想泛型在dart中的工作方式很奇怪,它会接受TList<T>。但是这是一个递归类型,所以我不明白为什么它是允许的。有什么方法可以防止用户输入错误的类型吗?

avwztpqn

avwztpqn1#

Dart泛型系统无法在编译时表示“is not”或“doesn't extend”。List是一个完全合理的类型传递到这里,并且没有根本的理由应该禁止它(它不是递归的)。你真的在这里指List吗?传递Set<T>可以吗?为什么你认为List<List<List<T>>>是一个特殊的问题类型?
但是如果你想禁止它,它只能在运行时完成。例如,在你的函数中,你可以添加一个Assert:

assert(data is! List);

字符串
这将帮助开发人员避免这个错误(如果它是一个错误)。
另一种(可能更好)方法是声明T必须扩展的一些基本类型,而不扩展List。这将限制可以传递给您实际想要的东西的内容。但是Dart无法在编译时表示“除了List之外的所有类型”。

相关问题