generics - 泛型和实际类型之间有什么关系?(镖)
问题描述
在定义基类时,我发现泛型和实际类型有些不同且令人困惑。
如下所示:
当我使用基本类型时,代码运行良好。
void main() {
var aa = AA.name("11");
aa.test();
}
class AA<T> {
T field;
AA.name(this.field);
void test() {
print(field.runtimeType);
print(T);
print(field.runtimeType == T);
}
}
这个结果:
String
String
true
但是当我使用其他类型时,情况会发生变化。
void main() {
var aa = AA.name(["11"]);
aa.test();
}
class AA<T> {
T field;
AA.name(this.field);
void test() {
print(field.runtimeType);
print(T);
print(field.runtimeType == T);
}
}
结果:
List<String>
List<String>
false
两者都是 List < String > 类型。为什么对应的类型不一样?
解决方案
尝试更改此行
print(field.runtimeType == T);
至
print(field.runtimeType.toString() == T.toString());
它将返回 true。
推荐阅读
- javascript - sinon.mock().expects().atLeast() ...expectation.verify() 不工作
- node.js - 在 for 循环中为查询创建 Promise
- json - 在 Swift 4 中合并 Realm 和 Codable 类
- dart - 如何使飞镖页面只出现一次
- visual-studio-code - Visual Studio Code - 灯泡没有出现
- ssis - SSIS Excel Destination Nothing Happens when I hit New for Name of Excel Sheet
- javascript - react-native 中没有出现图标
- java - Richfaces fileuploader nullpointer firefox
- javascript - 打开tel:XXXXXXXXXX时如何通过JS添加CORS
- unity3d - Unity LTS 和 Unity 最新版本有什么区别?