Scala 类型(推理)问题?

标签 scala types jersey inference

我正在使用 Jersey 在 Scala 中开发 REST web 服务JAX-RS 引用实现,我收到一个奇怪的错误。

我正在尝试创建一个 ContentDisposition对象使用 ContentDisposition.ContentDispositionBuilder .
ContentDisposition.ContentDispositionBuilder有两种类型T extends ContentDisposition.ContentDispositionBuilderV extends ContentDisposition .方法typeContentDisposition返回一个构建器实例。

编码

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 中的关键字)
fileNameContentDispositionBuilder返回 T 的实例所以这实际上应该有效。

我不明白这个。任何的想法?
顺便说一下,我正在使用 Scala 2.9.0.1。

更新:

这有效。但是为什么我需要这里的类型转换?
val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
  .fileName("dummy")
  .asInstanceOf[ContentDisposition.ContentDispositionBuilder[_,_]]
  .build()

最佳答案

我猜类型推断只能到此为止……您可能可以用两行来完成,而无需进行任何强制转换;你试过这个吗?

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()

关于Scala 类型(推理)问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7253779/

相关文章:

java - 如何在我的用例中协调线程

types - 类型 'float -> float' 与类型 'float' 不匹配

java - 如何在 jersey WriterInterceptor 实现中获取 @interface 参数

spring - 在 ContainerRequestFilter 中填充 spring 请求范围的 bean

scala - 在 Scala 中使用 for comprehension

scala - 使用带有 onComplete 的 Scala future 列表进行异步处理以进行异常处理

scala - Spark : increase the size of an RDD using sample with replacement

php - MYSQL 列中有 9,000 个字符串 - 使用哪种数据类型?

c - 分配时不兼容的类型 - 系统日期的 C 程序

java - 无法建立 JDBC 连接