Dart - class 存在于字符串中 - class 来自字符串的实例
Dart - class exists from string - class instance from string
我想知道是否有可能通过名称(字符串)找出 class(在同一个库中)是否存在,以及是否有可能创建 [=18= 的实例] 来自名称(字符串)。
在 PHP 中,您可以这样做:
$className = 'SomeClass';
if (class_exists($className))
$instance = new $className;
在发布此答案时,解决方案并不像 PHP 中那样简单,但可以通过以下方式进行管理:
String className = 'SomeClass';
if (currentMirrorSystem().isolate.rootLibrary.declarations.keys.join('').contains('Symbol("${className}")'))
var instance = currentMirrorSystem().isolate.rootLibrary.declarations[new Symbol(className)].newInstance(new Symbol(''), []).reflectee;
在字符串中搜索有点顽皮,但这是我自己实现它的最简单方法。
接下来就可以简单的调用实例的属性了:
instance.method();
希望对大家有所帮助。
我会更喜欢
import 'dart:mirrors';
class SomeClass {}
main() {
String className = 'SomeClass';
var instance;
ClassMirror cm = currentMirrorSystem().isolate.rootLibrary.declarations[
new Symbol(className)];
if (cm != null) {
instance = cm.newInstance(new Symbol(''), []).reflectee;
}
print(instance);
}
我想知道是否有可能通过名称(字符串)找出 class(在同一个库中)是否存在,以及是否有可能创建 [=18= 的实例] 来自名称(字符串)。
在 PHP 中,您可以这样做:
$className = 'SomeClass';
if (class_exists($className))
$instance = new $className;
在发布此答案时,解决方案并不像 PHP 中那样简单,但可以通过以下方式进行管理:
String className = 'SomeClass';
if (currentMirrorSystem().isolate.rootLibrary.declarations.keys.join('').contains('Symbol("${className}")'))
var instance = currentMirrorSystem().isolate.rootLibrary.declarations[new Symbol(className)].newInstance(new Symbol(''), []).reflectee;
在字符串中搜索有点顽皮,但这是我自己实现它的最简单方法。
接下来就可以简单的调用实例的属性了:
instance.method();
希望对大家有所帮助。
我会更喜欢
import 'dart:mirrors';
class SomeClass {}
main() {
String className = 'SomeClass';
var instance;
ClassMirror cm = currentMirrorSystem().isolate.rootLibrary.declarations[
new Symbol(className)];
if (cm != null) {
instance = cm.newInstance(new Symbol(''), []).reflectee;
}
print(instance);
}