Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 当返回类型为上限时,为什么需要强制转换?_Scala - Fatal编程技术网

Scala 当返回类型为上限时,为什么需要强制转换?

Scala 当返回类型为上限时,为什么需要强制转换?,scala,Scala,我正在编写一个具有上界的参数化类型T的类。该类有一个返回类型为T的方法: import java.time.temporal.{ Temporal, TemporalAmount } implicit class RichTemporal[T <: Temporal](t: T) { def + (amount: TemporalAmount): T = t.plus(amount) // error: type mismatch } 只有当我显式调用asInstanceOf[

我正在编写一个具有上界的参数化类型
T
的类。该类有一个返回类型为
T
的方法:

import java.time.temporal.{ Temporal, TemporalAmount }
implicit class RichTemporal[T <: Temporal](t: T) {
  def + (amount: TemporalAmount): T = t.plus(amount)    // error: type mismatch
}
只有当我显式调用
asInstanceOf[T]
时,代码才会工作,如下所示

import java.time.temporal.{ Temporal, TemporalAmount }
implicit class RichTemporal[T <: Temporal](t: T) {
  def + (amount: TemporalAmount): T = t.plus(amount).asInstanceOf[T]
}
import java.time.temporal.{temporal,TemporalAmount}
隐式类[T]
采用不同的路径,为什么编译器不知道调用t.plus(amount)是动态绑定的,因此返回类型t

因为它不必返回
t
,当然:

class MyTemporal extends Temporal {
  def plus(amount: TemporalAmount): Temporal = Instant.now()
  // other methods
}
这是一个完美的法律实施

采用不同的路径,为什么编译器不知道调用t.plus(amount)是动态绑定的,因此返回类型t

因为它不必返回
t
,当然:

class MyTemporal extends Temporal {
  def plus(amount: TemporalAmount): Temporal = Instant.now()
  // other methods
}
这是一个完美的法律实施