在类型参数上调用静态方法呈现方法未定义错误
Calling static method on type parameter renders method not defined error
假设这个方法:
T? reviveObject<T>( dynamic value ) {
if ( ( value is Map )
&& value.containsKey( '_type_' )
&& ( T.toString() == value[ '_type_' ] )
) {
print( '!! ' + T.toString() );
return T.fromJson( value as Map<String, dynamic> );
}
return null;
}
reviveObject
解码一些 JSON
以恢复 T
的对象。
使用例如调用时reviveObject<EItem>(value )
, EItem
实际上确实有一个 EItem.fromJson()
方法。
不幸的是,类型检查器抱怨说,fromJson()
没有在上面的泛型方法中定义。
如何让类型检查器不报错?
不可能,检查了解更多详情
TL;DR
Dart static method invocations are resolved at compile-time, so it's not possible to call them on type variables which only have a value at run-time.
我通过传递我想要的类型的 from json 函数克服了这个问题
即
T? reviveObject<T>( dynamic value, T Function(Object? json) fromJsonT ) {
假设这个方法:
T? reviveObject<T>( dynamic value ) {
if ( ( value is Map )
&& value.containsKey( '_type_' )
&& ( T.toString() == value[ '_type_' ] )
) {
print( '!! ' + T.toString() );
return T.fromJson( value as Map<String, dynamic> );
}
return null;
}
reviveObject
解码一些 JSON
以恢复 T
的对象。
使用例如调用时reviveObject<EItem>(value )
, EItem
实际上确实有一个 EItem.fromJson()
方法。
不幸的是,类型检查器抱怨说,fromJson()
没有在上面的泛型方法中定义。
如何让类型检查器不报错?
不可能,检查
TL;DR
Dart static method invocations are resolved at compile-time, so it's not possible to call them on type variables which only have a value at run-time.
我通过传递我想要的类型的 from json 函数克服了这个问题
即
T? reviveObject<T>( dynamic value, T Function(Object? json) fromJsonT ) {