泛型类上的Scala复制构造函数在便利方法上似乎失去了种类-为什么?

泛型类上的Scala复制构造函数在便利方法上似乎失去了种类-为什么?,scala,types,type-conversion,Scala,Types,Type Conversion,我的代码库中包含以下内容: case class QueryOptions[T] private ( range: DateRange, key: T, strategy: KeyStrategy, interval: Long, limit: Int ) { def withRange(newRange: DateRange) = copy(range = newRange) } 我可以从类型推断期望和IDE中看出,对copy的调用返回了Query

我的代码库中包含以下内容:

case class QueryOptions[T] private (
    range: DateRange,
    key: T,
    strategy: KeyStrategy,
    interval: Long,
    limit: Int
) {
  def withRange(newRange: DateRange) = copy(range = newRange)
}

我可以从类型推断期望和IDE中看出,对copy的调用返回了QueryOptions[T]。但是,withRange方法返回QueryOptions[Nothing]。显然,我可以对它应用类型化来强制结果为QueryOptions[T]),它编译得很好;为什么Scala在这里不明白,如果A=B,类型[A]=type[B]?

我如何在自己的机器上复制它?我没有你的
DateRange
keystractegy
课程。当我试图在没有它们的情况下复制它时,我没有得到你描述的行为:有趣。我刚刚使用了case类QueryOptions[T]private(range:String,key:T,interval:Long,limit:Int){def-withRange(newRange:String)=copy(range=newRange)}得到了完全相同的问题。我们使用的是相同的Scala版本吗?我是2.11.7。也许可以贴一份像我一样的回复成绩单,准确地展示你的尝试?是的,2.11.7。但我担心的不是运行时的类型,而是推断的类型。你可以绕过这一点,因为你的第二行没有要求。试着做一些像val res:C[String]=C(“foo”,5).foo这样的事情——对我来说,这是一个编译失败。IntelliJ标记它,如果不显式键入withRange方法,SBT将不会构建它。我承认我没有在REPL中尝试过,但不知道有什么区别。我已经按照你的建议修改了要点——在我这方面仍然没有编译错误。