在Dart中如何从字符串创建一个对象实例?

9

我该如何用Dart实现这段Java代码的等效功能?

Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");

(来自Jeff Gardner)

3个回答

8

1
'first'和'classes'属性在LibraryMirror中已经不存在了(我正在使用30188)。您如何在Dart v1中实现这个? - ringstaff

0

使用构建镜像,您可以这样做:

library my_lib;

import 'package:built_mirrors/built_mirrors.dart';

part 'my_lib.g.dart';

@reflectable
class MyClass {

  String myAttribute;

  MyClass(this.myAttribute);
}

main() {
  _initMirrors();

  ClassMirror cm = reflectType(MyClass);

  var o = cm.constructors[''](['MyAttributeValue']);

  print("o.myAttribute: ${o.myattribute}");
}

0

这是一个困扰我很久的问题,直到我想到可以实现一个简单的from方法来处理将编码的Json对象/字符串或Dart Maps转换为所需类的过程。

以下是一个简单的示例,它还处理了null并接受JSON(作为字符串参数)。

import 'dart:convert';

class PaymentDetail
{
  String AccountNumber;
  double Amount;
  int ChargeTypeID;
  String CustomerNames;

  PaymentDetail({
    this.AccountNumber,
    this.Amount,
    this.ChargeTypeID,
    this.CustomerNames
  });

  PaymentDetail from ({ string : String, object : Map  }) {
     var map   = (object==null) ? (string==null) ? Map() : json.decode(string) : (object==null) ? Map() : object;
     return new PaymentDetail(
        AccountNumber             : map["AccountNumber"] as String,
        Amount                    : map["Amount"] as double,
        ChargeTypeID              : map["ChargeTypeID"] as int,
        CustomerNames             : map["CustomerNames"] as String
     );
  }

}

以下是它的实现
 PaymentDetail payDetail =  new PaymentDetail().from(object: new Map());

 PaymentDetail otherPayDetail =  new PaymentDetail().from(object: {"AccountNumber": "1234", "Amount": 567.2980908});

再次强调,这种方法虽然简单但在整个项目中克隆起来很繁琐,但对于简单的情况确实有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接