【问题标题】:How to get the subtypes of a generic type using `DartType` from `analyzer` package?如何使用 `analyzer` 包中的 `DartType` 获取泛型类型的子类型?
【发布时间】:2017-01-20 10:05:26
【问题描述】:

如何使用 analyzer 包中的类 DartType 获取元素的子类型?

例如如果类型是List<String>,我想得到String。如果类型是generic,也将很有用。

另一个更复杂的示例是Map<String, String>,我想在其中获取子类型列表,在本例中为:[String, String]

【问题讨论】:

    标签: dart analyzer dart-analyzer


    【解决方案1】:

    这个有点棘手 - 因为DartType 实际上本身也有一些超类型 - 这里你会感兴趣的是ParameterizedType

    import 'package:analyzer/dart/element/type.dart';
    
    Iterable<DartType> getGenericTypes(DartType type) {
      return type is ParameterizedType ? type.typeArguments : const [];
    }
    

    我不知道是否有可能知道类型是否是泛型的——毕竟它只是一个类型。但是您可以再次使用ClassElement 来检查类型接受 泛型参数:

    import 'package:analyzer/dart/element/element.dart';
    import 'package:analyzer/dart/element/type.dart';
    
    bool canHaveGenerics(DartType type) {
      final element = type.element;
      if (element is ClassElement) {
        return element.typeParameters.isNotEmpty;
      }
      return false;
    }
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2015-12-12
      • 2017-06-25
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多