我试图理解为什么当我在MyModel中为T使用更高类型的参数时,以下代码无法编译
abstract class Model[M <: Model[M]]
class MyModel[T] extends Model[MyModel[T]]
class Bar[TModel <: Model[TModel]]
object Foo extends App {
new Bar[MyModel[_]]
}
但是如果我把它改成< code > new Bar[my model[Any]]它就会编译。这是为什么呢?
< code>Bar[MyModel[_]]是< code > Bar[my model[X]for some { type X }]。
(它不应该与Bar[MyModel[X]]forSome {type X}
或Bar[MyModel[X forSome {type X}]]
混淆,后者只是Bar[MyModel[Any]]
。这是三种不同的类型。
Bar[MyModel[X] forSome {type X}]
(aka Bar[MyModel[_]]
) 無法編輯,因為 MyModel[X] forSome {type X}
(又名 MyModel[_]
) 不滿足 Bar
的條件 TModel
implicitly[(MyModel[X] forSome {type X}) <:< Model[MyModel[X] forSome {type X}]]
不编译(
X
向左从
但是如果你做
模型
协变抽象类模型[ M
Bar[MyModel[Any]]
编译,因为 MyModel[Any]
满足 Bar
的条件 TModel
implicitly[MyModel[Any] <:< Model[MyModel[Any]]]
编译)。
一、泛型 Scala 支持类型参数化,使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数,Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) { override def toString: String = first + ":" + second } object ScalaAp
我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误:
我刚刚更新到Dart2和Flatter sdk:' 无法将参数类型“Object”指定给参数类型“ImageProvider”。), 我只是从弗利特开始,不知道该去哪里找别的。
由于最近的更新,我正面临这个问题,请伙计们帮帮我
我试图用flutter插件HTTP发出HTTP POST请求,但我得到了一个标题错误。有人知道这是什么原因吗?因为在我的其他应用程序中,这工作得非常好?
在了解Java泛型的过程中,我遇到了以下问题: 假设我有下面的方法来添加列表的元素,只限于包含数字的列表。 但是这段代码和这段代码有什么不同: 它们都按预期编译和执行。这两者之间有什么区别?除了语法之外?什么时候我更喜欢使用通配符而不是前者? 是的,使用通配符方法,我不能在列表中添加除null之外的新元素,否则它将无法编译。除此之外呢?