Получает имя класса Dart в виде типа или строки

#dart #flutter

#dart #flutter

Вопрос:

Проблема, которую мне нужно решить

Есть ли способ получить имя класса a dart class как String или Type объект ..?

 class MyClass {
}
var myClass = MyClass();
  

Я знаю property , runtimeType которые возвращают тип объекта как Type object. Но существует ли аналогичная функция для классов?

 print(myClass.runtimeType.toString());
  

Что я сейчас делаю, так это создаю объект класса и использую runtimeType .

 String type = MyClass().runtimeType.toString();
  

Примечание: В python в каждом классе есть переменная, вызываемая __name__ , которая делает то, что мне нужно.

Мое намерение

Моя конечная цель — создать объекты dart, используя ранее сохраненные имена классов. В этом выпуске они предложили метод, использующий Map s.
Дело в том, что у меня много классов, и этот метод выглядит неаккуратно в моей ситуации.

Что я сейчас делаю, так это сохраняю тип объекта с помощью:

 var saving = myClass.runtimeType.toString();
  

И при загрузке:

 if (saving == MyClass().runtimeType.toString()) {
    return MyClass();
}
  

Исходя из вашего опыта и мнений, можете ли вы предложить лучшее решение?

Комментарии:

1. Вы получаете оценку «А» за ясность и детализацию вашего вопроса.

Ответ №1:

Вы можете использовать:

 var runtimeTypeName = (MyClass).toString();
  

или для обобщений:

 var runtimeTypeName = T.toString();
  

Комментарии:

1. На самом деле, вам не нужно использовать (MyClass as Type) , вы можете просто написать (MyClass).toString()

2. @Ramesh-X Спасибо. Я протестировал это и внедрил в ответ, так как это проще.

3. Также, чтобы избежать вызова .toString() метода, вы можете использовать интерполяцию и сделать ее короче: '$MyClass' что также приведет к имени класса.

4. Зачем нужны скобки?: (MyClass)

5. @AjayGautam Без них компилятор будет искать статический метод определенного класса с именем toString . В скобках выполняется приведение типа конкретного класса к Type и используется его метод.

Ответ №2:

Тип класса может использоваться как Type :

 Type myType = MyClass;
  

Комментарии:

1. Могу ли я создать экземпляр MyClass, используя переменную MyType?

2. При передаче типа в качестве аргумента достаточно заключить имя класса в круглые скобки: (MyClass)