首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Dart中按字符串名实例化类

,可以使用反射机制来实现。Dart中的反射机制提供了一组API,可以在运行时动态地获取和操作类的信息。

要按字符串名实例化类,可以使用dart:mirrors库中的reflectClassnewInstance方法。首先,需要导入dart:mirrors库:

代码语言:txt
复制
import 'dart:mirrors';

然后,可以使用reflectClass方法获取类的ClassMirror对象,再使用newInstance方法实例化类。以下是一个示例代码:

代码语言:txt
复制
class MyClass {
  String name;

  MyClass(this.name);

  void printName() {
    print(name);
  }
}

void main() {
  String className = 'MyClass';

  // 获取类的ClassMirror对象
  ClassMirror classMirror = reflectClass(MyClass);

  // 实例化类
  InstanceMirror instanceMirror = classMirror.newInstance(Symbol(className), ['John']);

  // 调用实例方法
  instanceMirror.invoke(Symbol('printName'), []);
}

在上面的示例中,我们定义了一个名为MyClass的类,它有一个名为name的属性和一个名为printName的方法。然后,在main函数中,我们使用字符串'MyClass'作为类名,通过反射机制实例化了MyClass类,并调用了printName方法。

需要注意的是,使用反射机制会带来一定的性能开销,因此在实际开发中应谨慎使用。另外,Dart的反射机制在Web平台上的支持有限,可能无法在所有环境中使用。

推荐的腾讯云相关产品:腾讯云函数(云函数是一种无服务器计算服务,可以让您无需管理服务器即可运行代码),产品介绍链接地址:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dart - 抽象实例

一、抽象的使用 Dart 抽象可以只声明方法,也可以有具体的方法实现,但是不能直接用抽象来创建实例,只能被继承使用或者充当接口。...抽象不能实例。 继承: 子类比较实现抽象方法,子类可以不重写抽象已实现的方法。...接口: 必须实现抽象声明的所有方法 二、抽象实例 上面提到了抽象不能用于创建实例,但是有没有发现,Dart 提供的 Map 和 List 就是抽象,却可以直接使用它们创建出一个实例对象 final...Map源码 Map 的确是抽象,不过此时我们也注意到了, Map 这个抽象,定义了一个工厂构造方法,这就是使抽象实例的关键所在,因为工厂方法可以返回一个实例对象,但这个对象的类型不一定就是当前...很遗憾不行,因为抽象定义了工厂构造方法后,子类不能定义除工厂构造方法外的其它构造方法了,会报错~ 总结一下: 抽象无法直接创建实例,但是可以通过实现工厂构造方法来间接实现抽象实例

2.8K41
  • Dart 更好地使用和 mixin

    Dart 是一门“纯”面向对象的编程语言,其中所有的对象都是实例。但是 Dart 并不要求所有代码都定义一个。我们可以一个的外面定义顶级变量、常量、函数 —— 就像面向过程语言那样。...但是, Dart ,如果仅仅是一个函数,定义反而使得代码不好维护。这个时候建议直接使用 typedef 来定义函数别名。...public static int maxLength = 256; public static int minLength = 5; } 复制代码 这样做的好处是假设静态常量多个定义的话...那么对于 Dart 而言,外面定义的变量、函数可以使用库(library)作为命名空间来区分,因此这样的话即便出现变量一致也不会冲突。...其实 Dart 可以说是综合了面向对象语言和动态语言的优点,更贴近现代编程语言的特性。但编码工作万变不离其宗,我们利用 Dart 的特性应该是为了编写更好维护的代码,而不是滥用误用其新特性。

    2.4K00

    vsnprintf字符串格式输出实例:日志打印程序和行号

    Linux C/C++程序打印日志时,可能会由于需要打印未知个数的变量参数,那么vsnprintf函数就排上用场了。...这里使用一个简单的C程序例子,演示在打印源程序文件和该打印函数所在的行号的同时,使用vsnprintf函数打印个数未知的参数变量。...1 完整程序 代码比较简单,如果需要把内容打印日志文件的话,还需要调用文件处理函数。为了便于理解,这里直接把内容输出到控制台上了。...需要说明的三个地方: 1 2 3 静态全局变量 c_FileName 和 i_FileLineNum 分别用于存储源程序文件和打印函数所在的行号; 自定义标识符 PRINT 先调用源程序文件和行号的赋值函数...s]", "Hello." ); PRINT( "[%s %s]", "Hello", "world." ); return 0; } 2 编译执行 使用《Linux C/C++工程可生成

    42010

    C++ 实现通过来进行实例(反射机制?)

    参考:http://blog.csdn.net/cen616899547/article/details/9317323 目的:让一些能通过他的来进行实例,配合抽象工厂模式的使用 思路:1.有一个单例...2.每一个需要目的功能的,都需要有一个静态CKDynamicClass*成员和静态createInstance函数,CKDynamicClass*成员定义的时候,将该类的及相应的初始函数作为参数传入...##是宏定义的连接字符 #是让参数变为字符串,如#t -> "t" 上代码: 工厂 #ifndef FACTORY_H #define FACTORY_H #include ...CKDynamicClass*和createInstance #ifndef KDynamicClass_H #define KDynamicClass_H #include "factory.h" /* * 构造函数中注册及相应实例函数...使用上面定义的两个宏 #ifndef TESTCLASS_H #define TESTCLASS_H #include "dynamicclass.h" /* * 需要能通过进行初始

    2K31

    Xcode修改变量字符串的替换操作

    Xcode修改变量字符串的替换操作         在做iOS开发代码优化的工作时,优化代码结构之前,我们应该先整理好工程的外貌,将文件和的命名进行规范,Xcode为我们提供了方便而强大的名称修改功能...第一步:修改         将鼠标点击放在的名称上,选择Xcode工具栏的edit->refactor->rename: ?...第二步 修改相关字符串:         通过第一步,我们的的文件都已经更改,但并不全面,因为某些注释,字符串动态创建对象以及函数创建对象时的并没有更改,我们需要做这一步,将更改前的...,字符串方法以及xib和StoryBoard文件关联的id,cell复用符等。...第三步:修改文件变量         文件,我们也可以通过command+F换出搜索框,将Find改选为Replace检索进行我们想要的变量替换。

    2.3K20

    可以一个里声明并实例自身?

    /// 有了自定义的构造函数,就不会自动生成默认无参构造函数,在别处使用Atom atom = new Atom();就会报错 /// 这是私有的构造函数,说明只能在Atom实例...Atom的对象,也就是静态构造函数new出对象, /// 那么,其他地方要用Atom对象的话,就直接读上面那几个Atom对象就OK,别去每用一次Atom对象就new一次...也就是创建的第一个实例或引用的任何静态成员之前 /// static Atom() { C = new...答:此时Atom有一个属性是c ,而c是Atom的,则属性a作为对象,也有一个属性c,所以当Atom实例后,每个属性c都会包含属性c,这样不断递归下去,直到堆溢出。...m_next.ToString() : null); } } //Main调用SameDataLinkedList(),输出:ABC

    1.2K20

    Java——String使用详解(实例字符串比较、匿名对象、两种实例方法的区别)

    1、String的两种实例方式 String不是一个基本数据类型,它是一个,这个设计过程种加入了Java的特殊支持,其实例化形式有两种形式: 直接赋值: String 对象 = “内容”; 构造方法...3、String匿名对象 任何编程语言都不会提供字符串数据类型,字符串很多语言中使用字符数组,Java为解决这个问题,提供了String,Java里面也提供双引号声明的数据,这些数据不是普通的变量...4、String两种实例的区别 由第一节 的内容可知,对于String示例方式有两种,到底该使用哪种,两种的区别是什么?...使用直接赋值实例String对象操作字符串内容定义后实际上会自动保存在一个对象池之中,而后,若有其他 的字符串对象也采用直接赋值的形式,且内容与之前的完全相同,则不会开辟新的堆内存空间,而是通过对象池...进行内存分析可以发现,以上程序操作都是String对象的引用发生改变,而字符串的内容实质上根本没有发生改变,这样操作形成了很多垃圾空间,因此,开发,一定禁止循环修改String。

    1.8K10

    手把手教你进行Scrapyitem实例操作

    2、第一步的意思是说将items.py的ArticleItem导入到爬虫主体文件中去,将两个文件串联起来,其中items.py的部分内容如下图所示。 ?...3、将这个ArticleItem导入之后,接下来我们就可以对这个进行初始,并对其进行相应值的填充。首先去parse_detail函数下对其进行实例实例的方法也十分简单,如下图所示。 ?...实际上我们之前通过Xpath或者CSS选择器已经获取到了目标数据,如下图所示,现在要做的就是依次填充目标字段的值。 ?...再调用yield之后,实例后的item就会自动传递到pipeline当中去。可以看到下图中的pipelines.py默认给出的代码,说明pipeline其实是可以接收item的。 ?...7、到这里,关于实例item的步骤就已经完成了,是不是比较简单呢?我们后面把pipeline配置起来,一步一步的将Scrapy串起来。

    1K30

    Dart 的定义、构造函数、私有属性和方法、set与get、初始列表

    Dart是一门使用和单继承的面向对象语言,所有的对象都是实例,并且所有的都是Object的子类。 1. Dart的定义 ? 2. Dart的构造函数 ? 3....Dart的命名构造函数 ? 4. Dart中将抽离成一个单独的模块 首先将模块写到一个单独的文件,如下图所示为public文件夹下的Person.dart为一个单独的。 ?...文件引入public下的Person.dart文件,然后实例。 ? 5....需要注意的是,定义为私有属性和私有方法的必须要抽离放在一个单独的文件,然后才能真正起到私有的效果。 首先将含有私有属性或私有方法的放在一个单独的模块。 ?...文件引入含有私有属性和私有方法的。 ? 6. Dartget与set修饰符 ? 7. Dart的初始列表 Dart可以构造函数体运行之前初始实例变量。 ?

    6.3K40

    『Flutter开发实战』一小时掌握Dart语言

    带有上标 2 的关键字为 内置标识符,其作用只是JavaScript代码转为Dart代码时更简单,这些关键字大多数时候都可以作为有效的标识符,但是它们不能用作或者类型或者作为导入前缀使用。...例如 'This is a string' 是一个字符串字面量,true 是一个布尔字面量。 由于 Dart 每个变量引用都指向一个对象(一个 实例),你通常也可以使用 构造器 来初始变量。...} 如果你声明一个实例变量的时候就将其初始(而不是构造函数或其它方法),那么该实例变量的值就会在对象实例创建的时候被设置,此过程早于执行构造函数以及它的初始器列表。...初始列表 除了调用父构造函数之外,还可以构造函数体执行之前初始实例变量。每个实例变量之间使用逗号分隔。...不能显式地实例一个枚举。 你可以查阅 Dart 编程语言规范 获取更多相关信息。 使用 Mixin 为添加功能 Mixin 是一种多重继承复用某个中代码的方法模式。

    5.1K10

    flutter--Dart基础语法(一)注释、变量、数据类型、运算符

    实例。...最高级 final 变量或变量第一次使用时被初始。 提示: 实例变量可以是 final 类型但不能是 const 类型。...必须在构造函数体执行之前初始 final 实例变量 —— 变量声明,参数构造函数或构造函数的初始列表中进行初始。...因为 Dart 所有的变量终究是一个对象(一个实例), 所以变量可以使用 构造涵数 进行初始。 一些内建类型拥有自己的构造函数。 例如, 通过 Map() 来构造一个 map 变量。...(位运算符,例如»,定义 int 。) 如果 num 及其亚类型找不到你想要的方法, 尝试查找使用 dart:math 库。 // 整数类型不包含小数点。

    3K20

    Dart-(上)

    Person("Alice", 30); 这是一个实例对象的过程,我们可以通过 ....${} 语法进行字符串插值类型系统Dart 是一种 强类型 语言,需要显式地定义变量和返回值的类型JavaScript 是弱类型语言,类型是动态的静态方法和静态属性静态方法和静态属性是级别的成员,这意味着它们不属于任何特定的实例...,而是属于本身在 Dart 和 JavaScript 中都是可行的,尽管它们的实现方式略有不同Dart 的静态方法和属性 Dart ,你可以使用关键字 static 来定义静态方法和属性这些成员可以通过直接访问...中直到 ES2020 才正式支持这种语法属性定义:Dart 允许内部直接定义静态属性 JavaScript 的早期版本,静态属性通常在定义之外单独设置类型系统:Dart 静态成员可以拥有显式的类型...JavaScript 类型是动态的,不需要显式声明访问方式: Dart 和 JavaScript ,静态方法和属性都通过直接访问,而不是通过实例构造函数在上方的定义已经带着大家过了一遍的定义了我这里就是想给大家单独说一下这个语法糖的构造函数

    17910
    领券