在类型参数上调用静态方法呈现方法未定义错误

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 ) {