Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何确保始终推断出不可为null的类型?_Dart_Generics - Fatal编程技术网

Dart 如何确保始终推断出不可为null的类型?

Dart 如何确保始终推断出不可为null的类型?,dart,generics,Dart,Generics,我目前正在制作一个API,我希望类型为T的可选值从不可为空(当然,启用了空安全性) 让我们以以下内容为例: void main(){ T非NullableGeneric(T值){ 如果(值==null){ 抛出“这是空的”; } 返回值; } 非NullableGeneric(1);//工作正常 nonNullableGeneric(null);//工作正常,但我希望类型推断不允许使用可为null的值 //现在,这项工作如预期的那样: //“无法将参数类型'Null'分配给参数类型'int'。”

我目前正在制作一个API,我希望类型为
T
的可选值从不可为空(当然,启用了空安全性)

让我们以以下内容为例:

void main(){
T非NullableGeneric(T值){
如果(值==null){
抛出“这是空的”;
}
返回值;
}
非NullableGeneric(1);//工作正常
nonNullableGeneric(null);//工作正常,但我希望类型推断不允许使用可为null的值
//现在,这项工作如预期的那样:
//“无法将参数类型'Null'分配给参数类型'int'。”
// 
//…但是我必须指定类型'T',由于我的函数签名,它不清楚,所以必须清楚地指定
//需要类型为'T'的不可为null的值`
非NullableGeneric(null);
//我如何拨打以下电话:
//非NullableGeneric(null)
//向我抛出类似“参数类型'Null'不能分配给参数类型't.”的问题?
}
我还创建了一个

如您所见,如果要确保在使用泛型参数时类型不能为
Null
,则必须始终指定该类型


我怎样才能确保它永远不允许使用可为空的类型呢?

我发现答案非常明显,尽管我认为这样说是合理的:只需将您的类型
T
约束(扩展)到
对象的类型。这将确保该特定参数永远不能是可选的

引用
对象
文档:

//。。。
///因为“Object”是不可为空的Dart类层次结构的根,
///其他每一个非空的Dart类都是Object的子类。
/// ...
因此,在我提到的这个例子中,解决方案是:

void main(){
T非NullableGeneric(T值){
返回值;
}
非NullableGeneric(1);//工作正常
//抛出一个:
//无法推断类型参数“t”。尝试为不起作用的“t”推断“Null”:类型参数“t”声明为扩展“Object”。
//类型“Null”是从以下内容推断的:参数“value”声明为“T”,但参数为“Null”。
/考虑将显式类型参数传递给泛型
非NullableGeneric(null);
}

你的意思是做
if(value==null)
而不是
if(value!=null)
?如果您当前拥有的是正确的,那么抛出“This is null”似乎有点违反直觉。很好的回答顺便说一句@ChristopherMoore哦,天啊,哈哈哈,是的,我很抱歉,谢谢你的编辑(我总是使用可选的nullable,因为我来自一个敏捷的背景,你知道,出于习惯。