首页 > 解决方案 > “x”类型的值不能分配给“T”类型的变量

问题描述

鉴于以下代码,我不明白为什么A value of type 'Foo' can't be assigned to a variable of type 'T'.会引发错误。

void main () {
  Bar bar = Bar();
}

class Foo {
  //
}

class Bar<T extends Foo> {
  T foo = Foo();
}

标签: dart

解决方案


我不明白为什么A value of type 'Foo' can't be assigned to a variable of type 'T'.会抛出错误。

T extends Foo表示 thatT可以替代Foo(的每个实例T也是 a Foo),而不是 thatFoo可以替代T.

T foo = Foo();是不安全的,因为Foo()不一定是T; T可能是派生自Foo. 例如,假设您有:

class Baz extends Foo {
  void someBazSpecificMethod() {}
}

现在,如果您使用Bazas T,那将等同于Baz foo = Foo();which 显然应该是非法的。


推荐阅读