【问题标题】:How do I get the qualified name from a Type instance, in Dart?如何从 Dart 中的 Type 实例中获取限定名称?
【发布时间】:2013-04-13 03:56:12
【问题描述】:

我有一个Type 的实例,但我想要它的完全限定名称。我怎样才能做到这一点?我知道我必须使用 Mirrors(Dart 的反射库)。

【问题讨论】:

    标签: dart dart-mirrors


    【解决方案1】:

    使用来自dart:mirrors 的新reflectClass 顶级函数。

    这是一个例子:

    import 'dart:html';
    import 'dart:mirrors';
    
    class Awesome {
      // ...
    }
    
    void main() {
      var awesome = new Awesome();
      Type type = awesome.runtimeType;
      ClassMirror mirror = reflectClass(type);
      Symbol symbol = mirror.qualifiedName;
      String qualifiedName = MirrorSystem.getName(symbol);
    
      query('#name').text = qualifiedName;
    }
    

    qualifiedName 应该是这样的:

    http://127.0.0.1:3030/Users/sethladd/dart/type_name/web/type_name.dart.Awesome
    

    请注意,这适用于 build 21753 或更高版本。此外,这 当前 在 dart2js 中还不起作用。我们计划在 dart2js 中支持它。

    【讨论】:

    • 很棒,如果使用扩展方法会更好,即您可以拥有:String qualifiedName = reflectClass(type).qualifiedName.getName() - let Gilad know! :)
    • reflectClass(Awesome)这样直接使用类型是什么状态?
    • @KaiSellgren:reflectClass 的实现并不关心你是通过 obj.runtimeType 还是使用类型字面量获得了 Type 对象。换句话说,reflectClass(Awesome) 的状态应该与 reflectClass((new Awesome()).runtimeType) 的状态相同。如果您遇到这种情况,请在dartbug.com 提交错误。
    猜你喜欢
    • 2013-08-22
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多