2011-08-31 9 views
7

Tôi đang phát triển một dịch vụ web REST trong Scala bằng cách sử dụng triển khai tham chiếu JAX-RS Jersey và tôi nhận được một lỗi lạ.Vấn đề kiểu Scala (suy luận)?

Tôi đang cố tạo đối tượng ContentDisposition bằng cách sử dụng ContentDisposition.ContentDispositionBuilder.

ContentDisposition.ContentDispositionBuilder có hai loại T extends ContentDisposition.ContentDispositionBuilderV extends ContentDisposition. Phương thức type của ContentDisposition trả về phiên bản trình tạo.

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

tác phẩm tuy nhiên

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

tạo ra lỗi biên dịch

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

(Lưu ý rằng type cần phải được đưa vào "dấu ngoặc kép" vì đó là một từ khóa ở Scala)

fileName của ContentDispositionBuilder trả về phiên bản T để điều này thực sự hoạt động.

Tôi không hiểu. Bất kỳ ý tưởng? Tôi đang sử dụng Scala 2.9.0.1 bằng cách này.

Cập nhật:

này hoạt động. Nhưng tại sao tôi cần đúc ở đây?

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

là nó chỉ cho tôi hay không ai trong số các liên kết của bạn dường như làm việc? – agilesteel

+0

Có vẻ như java.net đang ở thời điểm hiện tại :-( –

+1

Lỗi này có liên quan đến việc tương tác giữa các ký tự đại diện Java và các hiện tượng Scala.Đặc biệt tương tự, hai tính năng hệ thống kiểu này không giống nhau. , nhưng nó có thể là giá trị cố gắng với Scala 2.9.1 vừa được phát hành –

Trả lời

2

Tôi đoán suy luận kiểu chỉ có thể đi xa ... Bạn có thể làm điều đó trong hai dòng, mà không phải thực hiện bất kỳ phôi nào; bạn đã thử cái này chưa

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

hoặc có thể

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