在 Dart 中获取通用列表的子类型

Châ*_*húc 1 dart

如何获取 Dart 中泛型类型 List 的子类型?
例如:

T is List< String > => String

T is List< SomeObject > => SomeObject
Run Code Online (Sandbox Code Playgroud)

我已经研究过这个问题,但我刚刚找到了一些解决方法。
对这个问题有什么建议吗?

lrn*_*lrn 7

无法在运行时获取列表的实际类型参数作为类型。如果类本身没有提供类型,则Dart 无法解构要访问的类型List<X>X

如果dart:mirrors可用,您也许可以使用它来查找作为Type对象的类型,这对于本例来说应该足够了,但镜像在 Flutter 中不可用。


Tim*_*low 6

为仍在搜索此内容的人提供最新更新:

从 Dart 2.7 开始,您可以使用扩展方法来实现此目的:

// extensions/list.dart

extension Typing<T> on List<T> {
    /// Provide access to the generic type at runtime.
    Type get genericType => T;
}
Run Code Online (Sandbox Code Playgroud)

https://dart.dev/guides/language/extension-methods#implementing-generic-extensions

然后,您可以通过导入它并像任何其他List函数一样使用它来使用它:

import './extensions/list.dart';

List<String> myList = ['some', 'strings'];

print('Your List type is ${myList.genericType}!');
Run Code Online (Sandbox Code Playgroud)

需要注意的是,它返回声明的类型,因此如果这是运行时该类型的超类,您仍然只能获得最初声明T的类型。List