1
특정 유형의 객체 만 필터링하는 클래스 세트가 있습니다. 스칼라에서 기본 형질에서 객체의 런타임 유형을 확인하는 방법
trait FilterTrait {
type RequiredType <: BaseType
def filter(baseObjects: Seq[BaseType]): Seq[BaseType] = {
val (requiredTypeObjects, nonRequiredTypeObjects) = baseObjects.partition(isOfRequiredType)
nonRequiredTypeObjects ++
filterRequiredType(requiredTypeObjects.asInstanceOf[Seq[RequiredType]])
}
def filterRequiredType(typeObjects: Seq[RequiredType]): Seq[RequiredType]
def isOfRequiredType[A <: BaseType](aObj: A): Boolean = ???(to be implemented)
}
class AFilter extends FilterTrait {
type RequiredType = CompoundType
...
}
class BFilter extends FilterTrait {
type RequiredType = BaseType with ATrait
...
}
나는 기본 클래스의 방법을 isOfRequiredType 구현하는 시도 :
def isOfRequiredType[A <: BaseType](aObj: A): Boolean =
classOf[RequiredType].isAssignableFrom(aObj.getClass)
내가 오류 "필요한 클래스 유형을하지만 RequiredType 발견"얻는다.
모든 하위 클래스에서 isOfRequiredType을 구현하여이 작업을 수행 할 수 있습니다. 하지만 기본 특성에 isOfRequiredType을 구현하여 이것이 작동하도록하는 방법이 있는지 궁금합니다.
나는 매니페스트에 관해 읽었지 만 나는 그렇게 사용하지 않았다. 그러나 RequiredType이 ATrait가있는 BaseType 인 경우에는 작동하지 않습니다. 이 경우 매니페스트 [RequiredType] .runtimeClass는 BaseType으로 설정되고 BaseType은 ATrait로 설정되지 않습니다. – Arun