2011-08-31 13 views
7

Sto sviluppando un webservice REST in Scala utilizzando l'implementazione di riferimento JAX-RS Jersey e sto ricevendo uno strano errore.Problema tipo Scala (Inferenza)?

Sto tentando di creare un oggetto ContentDisposition utilizzando ContentDisposition.ContentDispositionBuilder.

ContentDisposition.ContentDispositionBuilder ha due tipi T extends ContentDisposition.ContentDispositionBuilder e V extends ContentDisposition. Il metodo type di ContentDisposition restituisce un'istanza del builder.

Il codice

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

opere tuttavia

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

produce l'errore del compilatore

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

(Si noti che type deve essere messo in "virgolette" perché è una parola chiave in Scala)

fileName di ContentDispositionBuilder restituisce un'istanza di T quindi questo dovrebbe funzionare.

Non capisco. Qualche idea? Sto usando Scala 2.9.0.1 a proposito.

Aggiornamento:

Questo funziona. Ma perché ho bisogno del casting qui?

,
+0

Sono solo io o nessuno dei tuoi link sembra funzionare? – agilesteel

+0

Sembra che java.net non sia disponibile al momento :-( –

+1

L'errore ha qualcosa a che fare con l'interoperabilità tra caratteri jolly Java e stili esistenziali di Scala. Sebbene simili, queste due caratteristiche del sistema di sistema non sono le stesse. , ma potrebbe valere la pena provare con il solo rilasciato Scala 2.9.1. –

risposta

2

Immagino che l'inferenza di tipo non può che andare così lontano ... Probabilmente lo si può fare in due righe, senza dover fare alcun cast; hai provato questo?

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

o forse

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