2011-02-26 5 views
0
내가 스칼라로 자바에 NaturalComparator 클래스/객체를 작성하고 그것을 다시 한

: 나는 스칼라 버전 ("선택 해제") @SuppressWarnings 필요하지 않는 이유 https://gist.github.com/319827#file_natural_comparator.scala스칼라에서 체크되지 않은 제네릭 경고?

는 그러나, 나는 궁금하다. (fsc -deprecation -unchecked NaturalComparator.scala으로 컴파일합니다.)

  • 변환이 정상임을 인식 할만큼 스칼라가 강력합니까?
  • 스칼라 컴파일은 .asInftanceOf[...]에서 제네릭을 사용할 때 내가하고있는 일을 알고 있다고 가정합니까?

답변

4

스칼라는 자신이하는 일을 알고 있다고 가정합니다. 당신이 AnyAny을 비교할 수있는 경우가 있지만이 경우 당신은 비록 Comparator가 contravariant으로 표시되지 않기 때문에, 당신이 무슨 일을하는지 알고 ,이 역할 (즉, 확실히 당신은 어떤 특별한에 대한 TT을 비교할 수 있습니다 T).

수행중인 작업을 알지 못하면 런타임 오류가 발생하여 중단됩니다.

일반적으로, 하나는 이와 비슷한 경우에 패턴 매칭을 사용 :

def cast[T](x: Any) = x match { 
    case t: T => t 
    case _ => throw new Exception 
} 

을 지금 당신은 확실히 검사되지 않은 경고를받을 수 있나요 : T가 삭제되기 때문에, 경기가 당신이하지 생각하지 않습니다 .

+0

(Java의 경우 x instanceof T과 같이)이 경우 컴파일 시간 오류가 발생할 것으로 예상됩니다. – v6ak