我正在使用Jersey JAX-RS参考实现在Scala中开发REST Web服务,我遇到了一个奇怪的错误。
我正在尝试使用ContentDisposition创建ContentDisposition.ContentDispositionBuilder对象。
ContentDisposition.ContentDispositionBuilder
有两种类型T extends ContentDisposition.ContentDispositionBuilder
和V extends ContentDisposition
。 type
的方法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()
答案 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()