我知道value class在scala内联编译时的操作.
也许是这样的
case class A(i: Int) extends AnyVal {
def +(that: A) = A(this.i + that.i)
}
A(1) + A(2) // After compile it equals to 1 + 2
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎没什么大不了的.
它可能会提高性能,但是,
打电话this.i + that.i似乎没有那么慢i + i
为什么我们需要value classscala和任何用例???
据我所知,它Future是只读的,Promise是一次写入数据结构.
我们需要一个Promise完成一个Future
例如,
object Lie extends Throwable
val lie = Future { throw Lie }
val guess = Promise[String]()
lie.onComplete { case Success(s) => guess.success("I knew it was true!")
case Failure(t) => guess.failure("I knew it was lie")}
// return type: Unit
guess.future.map(println)
// res12: scala.concurrent.Future[Unit] = List()
// I knew it was lie!
// Requires Promise to chain Future with exception
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解为什么我们需要同时拥有Future和Promise
我猜Promise是因为Future.onComplete签名所必需的
由于Future.onComplete返回类型是 …
我想让下面的代码不会抛出任何错误
case class A(value: String)
val a = A("I hope to be string one day")
val value = a.asInstanceOf[String] // java.lang.ClassCastException: A cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)
我想修改A类以下工作
val value = a.asInstanceOf[String] // I hope to be string one day
Run Code Online (Sandbox Code Playgroud)
有人知道解决方案吗?