假设我有这个非常基本的结构:
class Foo<T> {
final T bar;
const Foo(this.bar);
}
我想强制执行类型特殊化,例如,防止使用
Foo(1)
创建实例(应改用Foo<int>(1)
)。一种方法是,在构造函数初始值设定项列表中添加
assert
语句,以确保T != dynamic
:class Foo<T> {
final T bar;
const Foo(this.bar) : assert(T != dynamic, "Can't create a Foo of dynamic type");
}
不幸的是,它似乎与
const
构造函数不兼容,因为它引发了一个错误:Invalid constant value
和T
都为dynamic
。有什么解决方法,为什么
dynamic
被认为是非恒定的? 最佳答案
T
是固定的。因此,您可以在类中的其他位置添加assert
。它是可构造的,但无法使用。 strict_raw_types
。加:analyzer:
language:
strict-raw-types: true
到您的
analysis_options.yaml
文件,以禁止Foo(1)
。 (请注意,仍然允许显式使用Foo<dynamic>(1)
。)关于dart - 如何在Dart的const构造函数中断言类型参数不是 “dynamic”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62127976/