2011-08-31 4 views
7

Jersey JAX-RS 참조 구현을 사용하여 스칼라에서 REST 웹 서비스를 개발 중이며 이상한 오류가 발생합니다.스칼라 유형 (추론) 문제가 있습니까?

ContentDisposition.ContentDispositionBuilder을 사용하여 ContentDisposition 개체를 만들려고합니다.

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 필요 "따옴표"에 넣어 수 있습니다 스칼라에서)

fileNameContentDispositionBuilderT의 인스턴스를 반환하므로 실제로 작동해야합니다.

나는 이것을 얻지 못한다. 어떤 생각? 그런데 스칼라 2.9.0.1을 사용하고 있습니다.

업데이트 :이 작동

. 그런데 왜 내가 여기 캐스팅이 필요한거야?

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

은 그냥 날인가, 아니면 당신의 연결 중 어느 것도 제대로 작동하지? – agilesteel

+0

java.net이 잠시 중단 된 것 같습니다 :-( –

+1

자바 와일드 카드와 스칼라 존재 사이의 interop과 관련된 오류가 있습니다. 비슷하지만이 두 유형의 시스템 기능은 동일하지 않습니다. 그러나 스컬라 2.9.1에서 방금 시도해 볼 가치가 있습니다. –

답변

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