gpt4 book ai didi

dart - 在 DART 中创建通用类型的实例

转载 作者:行者123 更新时间:2023-12-03 11:33:37 25 4
gpt4 key购买 nike

我想知道是否可以在 Dart 中创建泛型类型的实例。在 Java 等其他语言中,您可以使用反射来解决这个问题,但我不确定这在 Dart 中是否可行。

我有这门课:

class GenericController <T extends RequestHandler> {

void processRequest() {
T t = new T(); // ERROR
}
}

最佳答案

您可以使用类似的代码:

import "dart:mirrors";

void main() {
var controller = new GenericController<Foo>();
controller.processRequest();
}

class GenericController<T extends RequestHandler> {
void processRequest() {
//T t = new T();
T t = Activator.createInstance(T);
t.tellAboutHimself();
}
}

class Foo extends RequestHandler {
void tellAboutHimself() {
print("Hello, I am 'Foo'");
}
}

abstract class RequestHandler {
void tellAboutHimself();
}

class Activator {
static createInstance(Type type, [Symbol constructor, List
arguments, Map<Symbol, dynamic> namedArguments]) {
if (type == null) {
throw new ArgumentError("type: $type");
}

if (constructor == null) {
constructor = const Symbol("");
}

if (arguments == null) {
arguments = const [];
}

var typeMirror = reflectType(type);
if (typeMirror is ClassMirror) {
return typeMirror.newInstance(constructor, arguments,
namedArguments).reflectee;
} else {
throw new ArgumentError("Cannot create the instance of the type '$type'.");
}
}
}

关于dart - 在 DART 中创建通用类型的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com