首页
学习
活动
专区
工具
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

    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

    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++工程中可生成

    46510

    Xcode中修改变量名、类名及字符串的替换操作

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

    2.3K20

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

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

    1.8K10

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

    /// 有了自定义的构造函数,就不会自动生成默认无参构造函数,在别处使用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.3K20

    手把手教你进行Scrapy中item类的实例化操作

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

    1.1K30

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

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

    6.5K40

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

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

    5.1K10

    Dart-类(上)

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

    18410

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

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

    3K20
    领券