Dart使用IS运算符检查通用类型

时间:2019-04-18 03:21:19

标签: generics dart

在检查变量的类型时,我遇到了一些问题。

示例TList<MyClass>

T is List<MyClass>
//return false
T is List
//return false

最后,我必须使用一些愚蠢的方法才能获得正确的答案

T.toString() == "List<MyClass>"
//return true

有什么标准的方法可以处理它,或者我需要坚持愚蠢的方法直到正式发布?

2 个答案:

答案 0 :(得分:1)

我之前犯了“ T is SomeClass”错误。 T是一个类,因此“ is”将无法使用。 在元素上,您应该使用T == MyClass。 在列表上,您应该实例化一个不太可爱的List,例如List()为T。是的List == T无法正常工作,而List()== T也是如此。 不幸的是,到目前为止,我还没有找到更好的解决方案。希望它能起作用。

答案 1 :(得分:0)

import 'package:type_helper/type_helper.dart';

void main() {
  var list1 = [0];
  func(list1);
  var list2 = [MyClass<Map<String, int>>()];
  func(list2);
  var list3 = ['Hello'];
  func(list3);
}

void func<T>(T object) {
  if (isTypeOf<T, List<int>>()) {
    print('T is subtype of List<int>');
  } else if (isTypeOf<T, List<MyClass>>()) {
    print('T is subtype of List<MyClass>');
    if (isTypeOf<T, List<MyClass<Map<String, int>>>>()) {
      print('O, yes, T is subtype of List<MyClass<Map<String, int>>>>');
    }
  } else {
    print('Oh, no. T is not a subtype of valid type');
  }
}

class MyClass<Elem> {
  MyClass() {
    if (isTypeOf<Elem, Map<String, int>>()) {
      print('Elem is subtype of Map<String, int>');
    }
  }
}

结果:

T is subtype of List<int> Elem is subtype of Map<String, int> T is subtype of List<MyClass> O, yes, T is subtype of List<MyClass<Map<String, int>>>> Oh, no. T is not a subtype of valid type