假设我有一个函数,它以泛型类型作为参数。在该函数内部,如何检查泛型类型参数是否可为空?我想要像这样做:
void func<T>() {
print(T is nullable);
}
void main(){
func<int>(); //prints false
func<int?>(); //prints true
}
我能想到的唯一方法就是检查T.toString()
是否以?
结尾,这种方法非常不正规。
T is Object?
不起作用;is
需要一个实例。T == Object?
不是合法的语法(而且==
对于派生类型也不起作用)。instance is Object?
也不起作用,因为它总是真的。instance is! Object
可能有点用,但我认为这并不比instance != null
更好;它并没有告诉你关于参数化类型本身的任何信息。 - jamesdlinT?
并假设它在任何地方都是可空的,或者你应该通过添加一个T extends Object
约束来要求非空类型。另请参见 https://github.com/dart-lang/language/issues/143。 - jamesdlinlength
setter。如果新长度大于当前长度,则列表的长度将扩展,并将新元素设置为“null”。希望列表实现能够接受可空或非可空类型。 - Jon Aird