【问题标题】:Get the name of a Dart class as a Type or String以 Type 或 String 形式获取 Dart 类的名称
【发布时间】:2019-04-24 17:07:01
【问题描述】:

我需要解决的问题

有没有办法将dart class 的类名作为StringType 对象..?

class MyClass {
}
var myClass = MyClass();

我知道propertyruntimeType 将对象的类型作为Type 对象返回。但是类有类似的功能吗?

print(myClass.runtimeType.toString());

我目前做的是创建一个类的对象并使用runtimeType

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

注意:在python 中,每个类中都有一个名为__name__ 的变量,它可以满足我的需要。

我的意图

我的最终目标是使用以前保存的类名创建飞镖对象。在this issue 中,他们提出了一种使用Maps 的方法。
问题是我有很多类,而且这种方法在我的情况下看起来很乱。

我目前所做的是,通过以下方式保存对象类型:

var saving = myClass.runtimeType.toString();

加载时:

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

根据您的经验和意见,您能提出更好的解决方案吗?

【问题讨论】:

  • 您的问题的清晰性和细节性获得 A 级。

标签: dart flutter


【解决方案1】:

类类型可以用作Type

Type myType = MyClass;

【讨论】:

  • 我可以使用 myType 变量创建 MyClass 实例吗?
【解决方案2】:

你可以使用:

var runtimeTypeName = (MyClass).toString();

或者对于泛型:

var runtimeTypeName = T.toString();

【讨论】:

  • 其实不用(MyClass as Type),直接写(MyClass).toString()即可
  • @Ramesh-X 谢谢。我对其进行了测试并将其实现为答案,因为它更简单。
  • 为了避免调用 .toString() 方法,您可以使用插值并使其更短:'$MyClass' 这也将导致类名。
  • 为什么需要括号?:(MyClass)
  • @AjayGautam 没有它们,编译器将寻找名为toString 的特定类的静态方法。括号将特定类的类型强制转换为Type 并使用其方法。
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 2013-04-13
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多