Scala类型(推理)问题?

Sve*_*obs 7 types scala inference jersey

我正在使用Jersey JAX-RS参考实现在Scala中开发REST Web服务,我遇到了一个奇怪的错误.

我正在尝试使用ContentDisposition.ContentDispositionBuilder创建ContentDisposition对象.

ContentDisposition.ContentDispositionBuilder有两种类型T extends ContentDisposition.ContentDispositionBuilderV extends ContentDisposition.该方法typeContentDisposition返回建设者实例.

代码

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).build()
Run Code Online (Sandbox Code Playgroud)

然而有效

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()
Run Code Online (Sandbox Code Playgroud)

产生编译错误

error: value build is not a member of ?0
val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()
                                                                                                         ^
Run Code Online (Sandbox Code Playgroud)

(注意,type需要将其放在"引号"中,因为它是Scala中的关键字)

fileNameContentDispositionBuilder返回的实例T所以这应该实际工作.

我不懂.任何的想法?我顺便使用Scala 2.9.0.1.

更新:

这有效.但为什么我需要这里的铸造?

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
  .fileName("dummy")
  .asInstanceOf[ContentDisposition.ContentDispositionBuilder[_,_]]
  .build()
Run Code Online (Sandbox Code Playgroud)

Cho*_*hos 2

我想类型推断只能走这么远......您可能可以用两行来完成,而无需进行任何强制转换;你试过这个吗?

val something=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
val contentDisposition=something.fileName("dummy").build()
Run Code Online (Sandbox Code Playgroud)

或者可能

val builder=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy")
val contentDisposition=builder.build()
Run Code Online (Sandbox Code Playgroud)