【问题标题】:Create an Annotation in Dart lang在 Dart lang 中创建注解
【发布时间】:2019-11-24 00:25:29
【问题描述】:

我想在类属性中创建一个注释。 示例:

class Annotation {
        const Annotation(this.prop)
        final String prop;
    }

class Model{
    @Annotation("int_prop")
    Int prop;
}

我尝试使用 reflection,但没有找到 元数据,有人有想法吗?

【问题讨论】:

标签: flutter dart


【解决方案1】:

我解决了更好地理解 dart-lang 反射的问题。基本上,通过反射,您可以对 Object 的引用包含 Class 的变量和方法的元数据和值。 这是我查找类属性元数据的示例。

import 'dart:mirrors';

void main(List<String> args) {
  Model model = Model(prop: "property value");

  InstanceMirror mirror = reflect(model);

  // this is Map<Symbol,DeclarationMirror> contains properties (VariableMirrors) ,constructors and methods (MethodMirror) of
  // a Model mirror instance
  var mirrorDeclarations = mirror.type.declarations;

  mirrorDeclarations.forEach((symbol, member) {
    if (member is VariableMirror) {
      print("A List of Instance Mirror of Annotation ${member.metadata}");
      // result:A List of Instance Mirror of Annotation [InstanceMirror on Instance of 'Annotation']

      //find a specific metadata
      InstanceMirror annotation = member.metadata.firstWhere(
          (mirror) => mirror.type.simpleName == #Annotation,
          orElse: () => null);
      print("the Instance Mirror of Annotation ${annotation}");
      //result: the Instance Mirror of Annotation InstanceMirror on Instance of 'Annotation'

      //get reflectee, property value, using a Symbol
      print(
          "Annotation param value = ${annotation.getField(#param).reflectee}");
    }
    //result: Annotation param value = value example
  });
}

// simple annotation class
class Annotation {
  const Annotation({this.param});
  final String param;
}

//class property using annotation
class Model {
  Model({this.prop = ""});

  @Annotation(param: "value example")
  final String prop;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多