谁调用类表单dart库字符串或文件?
例如
for-load.dart文件
class TestLoad {
  void requestHandler(){
  }
}
然后是main.dart文件
main(){
   //this get load lib
   var lib = currentMirrorSystem().libraries[Uri.parse('dart:core')];
   //who to invoke class form TestLoad or for-load.dart? 
   //like java Class.forName('TestLoad') , nodejs require('for-load')
}
谢谢!
我希望能够使用Dart类构造函数执行此类操作:
class Model {
  // ... setting instance variables
  Model(Map fields) {
    fields.forEach((k,v) => this[k] = v);
  }
}
显然,这不起作用,因为this没有[]=方法.
有没有办法让它发挥作用,或者它根本不是做事的"飞镖方式"?如果不是,你能告诉我解决这个问题的正确方法吗?
我有两个类Parser和Proxy,当我从调用的方法Parser,它不存在,它会委托给Proxy类.
我的代码:
class Parser {
    noSuchMethod(Invocation invocation) {
        // how to pass the `invocation` to `Proxy`???
    }
}
class Proxy {
    static String hello() { return "hello"; }
    static String world() { return "world"; }
}
我写的时候:
var parser = new Parser();
print(parser.hello());
它将打印:
hello
假设我有一个List的String这样的.
var myList = new List<String>();
我怎样才能弄清楚,myList是List的String使用镜子S'
我尝试使用它typeVariables,ClassMirror但镜像似乎只是描述了泛List类.
InstanceMirror im = reflect(myList); // InstanceMirror on instance of 'List'
ClassMirror cm = im.type; // ClassMirror on 'List'
print(cm.typeVariables['E']) // TypeVariableMirror on 'E'
我也在文档中找到了这个,但我还没有找到一个ClassMirror访问originalDeclaration不会抛出的实例NoSuchMethodError.
最终的ClassMirror originalDeclaration
这种类型的原始声明上的镜像.
对于大多数课程,他们是他们自己的原始声明.但是,对于泛型类,原始类声明(具有未绑定的类型变量)和泛型类(具有绑定类型变量的实例化)之间存在区别.
是否有一个简单,轻量级/廉价的调用来确定对象是否支持命名方法?所以,在这个obj.respondsTo会很棒.
dynamic _toJson(dynamic obj) {
  return obj.respondsTo('toJson'))? obj.toJson() : obj;
}
class Foo {
  String foo = "Foo.foo";
  Bar bar = new Bar();
  Map toJson() {
    return {
      "foo" : _toJson(foo),
      "bar" : _toJson(bar)
    };
  }
}
一种替代方法是调用它并捕获noSuchMethod异常,但我认为这是不好的做法而且价格昂贵?
假设我定义了一个app包含一些类的库:
library app;
class User {
    // some members
}
class Question {}
class Answer {}
是否可以获取按名称指定的类的镜像?
var className = specifyClassName(); // may be "User", "Question", etc
ClassMirror cm = getClassMirror(className);
Dartlang教程介绍包:meta https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html#ch02-metadata
DartEditor识别上面教程中显示的元数据.本教程还介绍了如何创建自定义元数据并检索它.但是没有关于如何检索它的代码示例.
为我的生活增添一些理智,为instantiate()Dart的mirror图书馆寻找函数作为语法糖:  instantiate( class|type|instance, argArray )
class Klass {
  int i1;
  Klass( int i1 ) {
    this.i1 = (i1 is int) ? i1 : 0;
  }
}
type ktype = Klass;
Klass kinstance = new Klass( 5 );
Klass test1 = instantiate( Klass, [5] );
Klass test2 = instantiate( ktype, [5] );
Klass test3 = instantiate( kinstance, [5] );
目前90%的我的互动mirrors将被这一功能所覆盖.目前盲目地削减和复制出纯粹的愚蠢.当然比我聪明的人已经做到了!
这是instantiate( type, [constructor, positional, named] )所有场合:
Type实例化类型,也可以是类型的字符串表示形式如果我有2个文件:
bin.dart:
import 'lib.dart';
import 'dart:mirrors';
/*
class Foo{
  bool _bar() => true;
}
*/
void main() {
  var foo = new Foo();
  print(reflect(foo).invoke(#_bar, []));
}
lib.dart:
library lib;
class Foo{
  bool _bar() => true;
}
如果我运行bin.dart,我会得到我希望发生的事情,尝试调用私有方法时会出现异常.但是如果我注释掉该import 'lib.dart'行并取消注释本地Foo定义,这个timeit运行无例外,我想这是好的,因为现在从声明库中调用了私有方法.所以我的问题是,行为是否得到保证?我需要确保通过我的库中的镜像调用点不允许从其他库调用私有成员,目前我通过检查以_开头的名称来明确检查:
if(MirrorSystem.getName(inv.method).startsWith('_')){
  throw new RestrictedMethodError(inv.method);
}else{
  _this.invoke(inv.method, inv.posArgs, inv.namArgs);
}
但是,如果默认情况下仍然尊重隐私,那么我可以摆脱这个检查并删除我的库中的dart:mirror的导入,谢谢.
如果inv.method保证符号始终来自以下内容,该怎么办?
inv.method = MirrorSystem.getSymbol(stringName);
这会阻止在文件dart:mirrors-patch_mirrors_patch.dart行92中调用私有方法:
  static Symbol getSymbol(String name,[LibraryMirror library]) {
    if((library != null && library is !_LocalLibraryMirror) ||
       ((name.length > 0) && (name[0] == …说我有一节课:
class Icons {
       static const IconData threesixty = IconData(0xe577, fontFamily: 'MaterialIcons');
 }
现在我有一个值为"threesixty"的字符串变量:
String fieldName = "threesixty";
如何通过fieldName变量获取Icons类中的threesixty值?
我正在使用可反射的包,已经使用了ClassMirrors的其他功能,但不知道如何做到这一点.
dart ×10
dart-mirrors ×10
delegates ×1
flutter ×1
generics ×1
nosuchmethod ×1
proxy ×1
reflection ×1