“T”类型的值无法分配给“Object”类型的变量,因为“T”可为空,“Object”不可为空
来源:5-15 带你了解Dart泛型在Flutter中的应用
慕无忌6890528
2022-02-18
错误描述:
- Error: A value of type ‘T’ can’t be assigned to a variable of type ‘Object’ because ‘T’ is nullable and ‘Object’ isn’t.
- 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();
个人感觉, 这个解决办法是将类型限制去除, 但是感觉这个并不是真正的解决办法, 只是可以将代码可以运行起来的办法 。有没有真正的解决方案 ???
012022-02-21
相似问题