2011-01-15 4 views
3

객체가 사례 클래스의 인스턴스인지 여부를 알 수있는 방법이 있는지 궁금합니다. unapply과 일치하는 일부 구조 유형을 찾으려고했는데, 나는 그들이 Product을 상속 받았다는 것을 알았습니다. 같은 갈 것 기능에 대한 나의 실제 필요 :스칼라 객체가 사례 클래스의 인스턴스인지 알면

def withCaseClass[T <: /* matcher for case class */](obj:T) ... 

내 주요 관심사는 확실 경우에만 클래스가이 함수에 전달 될 수 있도록하는 것입니다.

+3

누가 케이스가 아닌 클래스를 전달하려고합니까? 테러리스트? –

+0

스위치에서 사용할 수있는 개체 만 메서드에 전달되는 것을 컴파일 타임에 제한하려고했습니다. – Thomas

+0

스위치를 패턴 매칭을 사용하여 표현할 수 있지만 (패턴 매칭이 더 일반적 임) 스칼라에는 패턴 매칭에서이를 어떻게 사용하고 싶습니까? –

답변

2

사례 클래스 나 튜플에 마커 특성이 없으므로 최선의 방법은 제품을 확장하고 "scala. *"로 시작하는 패키지에 없는지 확인하는 것일 수 있습니다. :/

7

case class 구현 세부 사항입니다. 케이스 클래스와 똑같은 역할을하는 클래스를 만들 수 있습니다. 그렇게 할 수있는 능력은 매우 중요합니다. 특정 요구 사항이 더 좋은 선택을한다면 은 정상 클래스로 전환 할 수 있습니다.

2

컴파일러가 사례 클래스에서 수행하는 작업과 정확히 똑같은 작업을 수행 할 수 있고 생성 된 바이트 코드가 구별 할 수 없기 때문에 (이 단어가 ... 재미있어 보입니다 ...), 사용자는 운. 진짜 질문은 : 왜 당신이 신경 써야합니까?

+0

예 단어입니다. –

0

자바에서 나는 뭔가 경우 클래스 인 경우 감지

Product.class.isAssignableFrom(someClassThatMayBeACaseClass); 

을 사용했습니다. 케이스 클래스가 아닌 제품이있을 가능성이 있지만.

관련 문제