这个成语(?)在楼梯书中出现了很多次:
val b:A = new B
或
val b = new B
val b2:A = b
除了试图在教科书中提出一些观点之外,你为什么要声明一种与推断类型的东西不同的类型?
顺便问一下,这个名字是什么?
答案 0 :(得分:14)
对于:
非常有用对于更复杂的实例化,它确保推断类型是正确的。例如
sealed trait Answer
case object Yes extends Answer
case object No extends Answer
scala> val a = List( Yes, Yes, No )
a: List[Product with Serializable with Answer] = List(Yes, Yes, No)
scala> val b: List[Answer] = List( Yes, Yes, No )
b: List[Answer] = List(Yes, Yes, No)
答案 1 :(得分:10)
我认为它类似于对接口编程的习惯用语。通过做
val b:A = new B
您确保在此之后您不依赖于A
提供的界面以外的任何其他内容。即,它保证如果你决定改为b:A = new C
什么都不会破坏。