“T”类型的值无法分配给“Object”类型的变量,因为“T”可为空,“Object”不可为空

来源:5-15 带你了解Dart泛型在Flutter中的应用

慕无忌6890528

2022-02-18

错误描述:

  1. Error: A value of type ‘T’ can’t be assigned to a variable of type ‘Object’ because ‘T’ is nullable and ‘Object’ isn’t.
  2. Error: A value of type ‘Object?’ can’t be returned from a function with return type ‘T’.
    代码示例:

// 为了更好的调用方法, 我们声明一个 类
class TextGeneric {
  // 创建 FunctionLearn 的对象

  void start() {
    // 使用泛型类

    Cache<String>cache1=Cache();

    // 泛型作用: 类型检查约束类比:List<String>
    cache1.setItem('cache1', 'value');

    String resStr1 = cache1.getItem('cache1');
    print('获取缓存内容: $resStr1');

  }
}


// 创建一个 泛型 类
class Cache<T>{
  // 这里是内存级别的缓存, 并模拟实现
  /**
   * String: key
   * Object: 缓存对象
   */
  static final Map<String, Object> _cached = Map();

  // 创建泛型的 set 方法, 提供一个设置缓存的方法 。

  void setItem(String key, T value) {
    // 保存缓存
    _cached[key] = value; // 版本问题错误(在 Dart2.7 中引入了空安全)
    // 解决办法:
    // _cached[key] != value;
  }

  // 创建泛型的 get 方法, 去从缓存中获取缓存 。
  T getItem(String key) {
    // 返回对应 key 值的缓存内容
    return _cached[key]; // 版本问题错误(在 Dart2.7 中引入了空安全)
    // 解决办法:
    // return _cached[key] as T;
  }
}

图片示例:
图片描述

写回答

1回答

慕无忌6890528

提问者

2022-02-18

上述问题解决方案一:

  // static final Map<String, Object> _cached = Map();

  static final  _cached = Map();

个人感觉, 这个解决办法是将类型限制去除, 但是感觉这个并不是真正的解决办法, 只是可以将代码可以运行起来的办法 。

有没有真正的解决方案 ???


0
1
CrazyCodeBoy
还没更好的方案
2022-02-21
共1条回复

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程