Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart:获取泛型列表类型的子类型_Dart_Flutter - Fatal编程技术网

Dart:获取泛型列表类型的子类型

Dart:获取泛型列表类型的子类型,dart,flutter,Dart,Flutter,考虑以下方法: static void parse<T>(String input, T instance) 静态void解析(字符串输入,T实例) 可能存在这样一种情况,T是列表的一种类型。如何获取列表的子类型?请注意,列表中目前没有任何元素。这样做,例如列表[0]。runtimeType不是选项 如果T的类型为List,我想得到Foo 如何在Dart中做到这一点?我不确定您想做什么,但也许您可以编写如下方法: static void parseList<T>(St

考虑以下方法:

static void parse<T>(String input, T instance)
静态void解析(字符串输入,T实例)
可能存在这样一种情况,
T
列表的一种类型。如何获取
列表的子类型
?请注意,
列表中目前没有任何元素。这样做,例如
列表[0]。runtimeType
不是选项

如果
T
的类型为
List
,我想得到
Foo


如何在Dart中做到这一点?

我不确定您想做什么,但也许您可以编写如下方法:

static void parseList<T>(String input, List<T> list)
静态空解析列表(字符串输入,列表)

请提供更多背景信息以获得更好的答案。

此特定功能不可用,因为它会使树摇晃变得复杂

根据您的使用案例,您可能可以通过以下方式逃脱:

void parseList<T>(String input, List<T> instance) {
  // T is now the static type of List<T>
}
void parseList(字符串输入,列表实例){
//T现在是列表的静态类型
}
但是,如果静态地未知
列表的类型,这将不起作用。

可以这样做,但是这是一个非常糟糕的解决方法。一个条件是,您必须在能够访问列表类型之前初始化列表

List<Something> someList = new List<Something>();
String type = someList.runtimeType.toString(); // List<Something>
List someList=newlist();
字符串类型=someList.runtimeType.toString();//列表

然后您就可以阅读该类型并使用它进行操作。

我怀疑这是可能的。您目前无法这样做。如果您知道它可能是的所有类型,您可以彻底地测试
实例is List
<代码>实例if List
,等等,但是没有办法将您知道的东西作为一个
列表
,并将其元素类型作为一个类型。如果可以使用镜像,则可以从
reflect(instance).type.typeArguments[0].reflectee
获取类型作为
type
对象。但是,使用
类型
对象并不能带来很多好处。@lrn谢谢!然而,我使用的是反射的另一个版本。它被称为可反射dart,但它在列表上不起作用。而且不能对dart代码进行模糊处理,运行时类型也将被模糊处理。所以类型将是列表或类似的。换句话说,它在发布模式下无法工作。