如何获取 Dart 中泛型类型 List 的子类型?
例如:
T is List< String > => String
T is List< SomeObject > => SomeObject
Run Code Online (Sandbox Code Playgroud)
我已经研究过这个问题,但我刚刚找到了一些解决方法。
对这个问题有什么建议吗?
无法在运行时获取列表的实际类型参数作为类型。如果类本身没有提供类型,则Dart 无法解构要访问的类型List<X>。X
如果dart:mirrors可用,您也许可以使用它来查找作为Type对象的类型,这对于本例来说应该足够了,但镜像在 Flutter 中不可用。
为仍在搜索此内容的人提供最新更新:
从 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
| 归档时间: |
|
| 查看次数: |
6257 次 |
| 最近记录: |