镖。使用泛型T和对象有什么区别?

时间:2015-03-26 19:21:29

标签: generics dart

我试着理解使用Generics和Object之间的区别。我已经阅读了一些与Java相关的答案(请参阅https://stackoverflow.com/a/5207175/1349754),我发现差异非常明显 - 函数/方法返回(a)对象,如果我们使用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;
}

我不熟悉使用面向对象的意识形态。所以请问,任何人都可以解释使用泛型而不是Object基类的区别。

1 个答案:

答案 0 :(得分:1)

当只有类型在几个类之间发生变化时,泛型允许避免许多声明。在您的示例中,TestObject类可以删除,并替换为TestGeneric<Object>,只显示TestObject

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

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