我试图理解为什么当我在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请求,但我得到了一个标题错误。有人知道这是什么原因吗?因为在我的其他应用程序中,这工作得非常好?
问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问