2013-12-18 4 views
1

nscala-time (Joda Time 용 래퍼)을 사용하고 있으며 프로젝트에서 매끄럽게 사용하고 있습니다. Joda 시간에 정의 된 "dateTime에"유형을 지원하지 않습니다 분명히 슬릭스칼라에서 datetime으로 긴 변환

Article.insert(0,"title1", "hellothere", DateTime.now.getMillis.asInstanceOf[Timestamp]) 

, 그리고 내가 대신 java.sql.Timestamp를 사용해야합니다 : 나는 데이터베이스에 한 줄을 쓰기 위해이 절을 사용하려고 해요. 그래서 "asInstanceOf"를 사용하여 insert 메서드 내에서 약간의 변환을하기로 결정했습니다. Scala는 Java.Long을 Java.sql.Timestamp로 변환 할 수 없다고 말합니다. 그런 다음이 코드를 사용했습니다.

val dateTime = new DateTime(); 
val timeStamp = new Timestamp(dateTime.getMillis()); 

Article.insert(0,"title1", "hellothere", timeStamp) 

이 코드는 마술처럼 작동하며 남은 것은 혼동입니다.

어떻게하면 변환 할 수 있습니까? asInstanceOf과 다른 전환을 사용해야합니까?

답변

6

asInstanceOf의 내용을 잘못 이해했습니다. asInstanceOf을 변환하지 않았습니다. 그것이하는 일은 컴파일러에게 거짓말입니다. 지식이있는 대신에 뭔가를 믿으라고 말합니다.

그래서 Long이 있었는데 Long이 있었지만 분명히 작동하지 않는 것처럼 위장한 것은 Timestamp입니다.

나는 asInstanceOf에 관한 간단한 추천을 : 절대 사용하지 마십시오.

+0

emmm..scala에서 타입 변환의 선호되는 방법은 무엇입니까? (내 문제에 관해서) –

+0

@WindDweller 기본 값 클래스 (Int, Double, Char 등)에 대한 것들을 제외하고 실제로 타입 변환은 없습니다. 소스 객체에는 그것을 ('toInt'와 같이) 다른 것으로 변환하는 메소드가 있거나 대상 유형에는 소스 유형의 객체를 인수로 취하는 생성자가 있습니다. –

2

마술은 없습니다. 첫 번째 진술 :

DateTime.now.getMillis 

Long입니다. Long은 Timestamp이 아니므로 asInstanceOf을 사용하여 Long로 변환 할 수 없습니다.

두 번째 문 :

new Timestamp(dateTime.getMillis()) 

dateTime.getMillis을 기반으로 새 타임 스탬프 인스턴스를 만들 수 Timestamp 생성자를 사용하고 있습니다.