如何检查道具类型时,如下所示
void main(){
var obj = Ball<PassData>(data: PassData(id: 1,nama: 'asdas'));
print('${obj.get()}');
}
class Ball<T>{
T data;
Ball({this.data});
String get(){
if(data is PassData){ //can't check it this way
return 'this type has ${data.id} and ${data.nama}'; //compile error
}
else{
return 'no : $data';
}
}
}
class PassData{
String nama;
int id;
PassData({this.nama,this.id});
}
当使用PassData对象的属性时,我得到了一个类似上面的编译错误。我需要获取'data‘类型属性的类型。我做错了吗?
发布于 2020-09-29 14:46:58
您的问题不在于类型是泛型,而在于变量不是局部变量。Dart只提升局部变量,因此执行if (data is PassData)
不会将实例变量/字段data
提升为PassData
。
试着写成:
String get() {
var data = this.data;
if (data is PassData) {
return 'this type has ${data.id} and ${data.nama}';
} else {
return 'no: $data';
}
}
发布于 2020-09-29 14:59:44
当前您的数据为T类型,而get类不知道它属于哪个类,因此无法处理这些操作。您可以尝试这样做:
String get(){
if(this.data is PassData){
return 'this type has ${(data as PassData).id} and ${(data as PassData).nama}';
}
else{
return 'no : $data';
}
}
https://stackoverflow.com/questions/64113829
复制相似问题