generics - Dart 。使用通用T和对象有什么区别?

标签 generics dart

我试图了解使用泛型和对象之间的区别。我已经阅读了一些与Java相关的答案(请参阅https://stackoverflow.com/a/5207175/1349754),并且发现差异非常明显-函数/方法返回(a)如果将Object用作输入参数类型,则返回Object;以及(b)如果使用通用T,则返回实际类型但是,Dart有其自己的行为,在这种情况下不适用。让我们来看一个例子:

main() {
  // expect Object type
  print((new TestObject()).Pass('string').runtimeType);
  // expect String type
  print((new TestGeneric()).Pass('string').runtimeType);
  // both output String type
}

class TestObject {
  Object Pass(Object element)
    => element;
}

class TestGeneric<T> {
  T Pass(T element)
    => element;
}

我没有使用面向对象的思想的丰富知识。因此,请任何人解释使用泛型而不是对象基类的区别。

最佳答案

当在几个类之间只有类型改变时,泛型可以避免许多声明。在您的示例中,可以在出现TestObject的所有位置删除TestGeneric<Object>类,并用TestObject替换。

您对(new TestObject()).Pass('string').runtimeType的预期输出不正确。 runtimeType返回对象的类型。在这里,返回的是'string',因此'string'.runtimeTypeString

要知道方法的返回类型,您必须在运行时使用mirrors或在构建时使用analyzer

关于generics - Dart 。使用通用T和对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287106/

相关文章:

dart - Dart 编程语言是否有相当于 Javascript 的 "prototype"?

serialization - 通过MessageBox输入数据?

dart - webdev 为 .js.map 文件提供丢失的输出

java - 我的 History() 方法面临问题,如何根据最旧的更改进行排序?

java - 在java中填充通用数组

c# - 泛型协变转换或转换为实型

oop - 如何在 Dart 中定义接口(interface)?

java - 检查通用函数android java中的对象类型

Swift 3泛型函数不明确返回

Flutter 无法调用 setState 重建 widget