【问题标题】:Dart. What the difference between using generic T and Object?镖。使用泛型 T 和 Object 有什么区别?
【发布时间】:2015-05-30 23:30:48
【问题描述】:

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

【问题讨论】:

    标签: generics dart


    【解决方案1】:

    当只有类型在几个类之间发生变化时,泛型允许避免许多声明。在您的示例中,TestObject 类可以被删除并替换为 TestGeneric&lt;Object&gt; 在任何出现TestObject 的地方。

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

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

    【讨论】:

    • 拜托,您能否给出一些代码示例,其中明显有好处或泛型。我仍然几乎看不到区别..
    • 例如,如果你定义a = new TestGeneric&lt;String&gt;(),你会得到一个警告如果你调用@987654332,参数类型'int'不能分配给参数类型'String' @
    • 嗯,有道理!我开始明白了)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2023-03-17
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2021-04-24
    相关资源
    最近更新 更多