我试图了解使用泛型和对象之间的区别。我已经阅读了一些与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'.runtimeType
是String
。
要知道方法的返回类型,您必须在运行时使用mirrors或在构建时使用analyzer。
关于generics - Dart 。使用通用T和对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287106/