dart: как проверить общий тип свойства?

#dart

#dart

Вопрос:

как проверить тип prop при его использовании, как показано ниже

 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 у меня возникает ошибка компиляции, подобная приведенной выше. Мне нужно получить тип свойства типа «данные». Я делаю это неправильно?

Ответ №1:

Ваша проблема не в том, что тип является общим, а в том, что переменная не является локальной переменной. Dart поддерживает только локальные переменные, поэтому выполнение if (data is PassData) не способствует присвоению переменной / полю экземпляра data значения a PassData .

Попробуйте записать его как:

   String get() {
    var data = this.data;
    if (data is PassData) {
      return 'this type has ${data.id} and ${data.nama}';
    } else {
      return 'no: $data';
    }
  }
  

Ответ №2:

В настоящее время ваши данные имеют тип 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';
}
  

}