Scala类型(推理)问题?

时间:2011-08-31 07:20:38

标签: scala types jersey inference

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

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

ContentDisposition.ContentDispositionBuilder有两种类型T extends ContentDisposition.ContentDispositionBuilderV extends ContentDispositiontype的方法ContentDisposition返回构建器实例。

代码

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).build()

然而

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()

产生编译器错误

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

(请注意,type需要放在“引号”中,因为它是Scala中的关键字)

fileName的{​​p> ContentDispositionBuilder会返回T的实例,因此这实际上可以正常工作。

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

更新

这很有效。但为什么我需要在这里进行铸造呢?

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

1 个答案:

答案 0 :(得分:2)

我猜类型推断只能到目前为止......你可以用两行来完成它,而不需要做任何演员表;你试过这个吗?

val something=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
val contentDisposition=something.fileName("dummy").build()

或者

val builder=ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy")
val contentDisposition=builder.build()