나는 Comparable을 취하여 Comparable을 반환하고 같은 일을하는 다른 메서드를 래핑합니다.뷰 바운드가 상위 유형 바인딩과 호환되지 않습니까?
def myMethod[T <: Comparable[T]](arg: T): T = otherMethod(arg)
def otherMethod[T <: Comparable[T]](arg: T): T = arg
이 함수는 컴파일되지만 Int 또는 다른 형식의 myMethod를 호출 할 수 없습니다. Comparable를 구현하려면 암시 적 변환이 필요합니다. 내가 이해하기 때문에 뷰 경계는 이러한 유형의 문제를 해결하기위한 것이지만 뷰 바인딩을 사용합니다.
컴파일러 오류가 발생합니다.
inferred type arguments [T] do not conform to method otherMethod's type parameter bounds [T <: java.lang.Comparable[T]]
지금까지 유일한 해결 방법은 두 번째 형식 매개 변수를 사용하여 두 형식 사이에 캐스팅하는 것입니다.
def myMethod[T <% Comparable[T], U <: Comparable[U]](arg: T): T =
otherMethod(arg.asInstanceOf[U]).asInstanceOf[T]
이 방법은 효과가 있지만보기 흉합니다. 더 좋은 방법이 있습니까?
1. 아니요, 불행히도 otherMethod는 제 3 자 라이브러리에 정의되어 있습니다. 2. 예! 이것은 작동하는 것 같습니다. 감사! – ethzero
도와 줘서 기쁩니다 :-) –
사실 저는 너무 빨리 말했습니다 ... 두 번째 해결책은 컴파일되지만 Int로 호출 할 수는 없습니다. 여기에 오류가 있습니다 : "유형 인수 [Int, Int]가 메소드 myMethod의 유형 매개 변수 경계 [U <: java.lang.Comparable [U], T]에 일치하지 않습니다." – ethzero