假设我有一个非常基本的结构:
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
被认为是非恒定的?
答案 0 :(得分:2)
实例化对象后,T
被修复。因此,您可以assert
在班上其他任何地方。它是可构造的,但无法使用。
考虑改用strict_raw_types
。添加:
analyzer:
language:
strict-raw-types: true
访问您的analysis_options.yaml
文件以禁止Foo(1)
。 (请注意,仍然可以明确使用Foo<dynamic>(1)
。)