我当前的目标是删除此代码重复:
final int? myNullableInt = 10;
/// Everywhere I need to do this null verification:
if (myNullableInt == null) return null;
return someOtherMethodThatReceivesANonNullableInt(myNullableInt);
我想转换成像我们在Kotlin中使用的东西:
final int? myNullableInt = 10;
return myNullableInt?.apply((myInt) => someOtherMethodThatReceivesANonNullableInt(myInt));
我做到了:
extension ApplyIfNotNull on Object? {
T? apply<T extends Object?>(Object? obj, T? Function(Object) fn) {
if (obj == null) return null;
return fn(obj);
}
}
但这给了我一个静态错误:
The argument type 'Object' can't be assigned to the parameter type 'int'.
注意:这应该适用于所有类型,例如int
s、String
s、double
和MyOwnClassType
s。
我能做些什么吗?还是我错过了什么?
1条答案
按热度按时间xsuvu9jc1#
这是不起作用的,因为它声明回调函数能够接受任何
Object
参数,但您可能试图将其用于只接受int
参数的函数,也不清楚为什么要创建扩展方法,因为它根本不涉及接收方(this
)。您还需要在回调的参数类型上使函数泛型化:
(That与我在www.example.com中提出的建议相同https://github.com/dart-lang/language/issues/360#issuecomment-502423488,但论点相反。)
或者,作为一个扩展方法,这样它就可以在
this
上工作,而不需要额外的obj
参数:另请参阅https://github.com/dart-lang/language/issues/360以了解现有的语言特性请求以及其他一些建议的解决方法。