#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)