나는 여러 가지 사례 클래스로 확장 된 '계약'이라는 어머니 특성을 가지고 있는데, 그 중 하나 인 '축척'이 있습니다. 나는 그것들이 어떤 종류의 객체인지에 기초하여 그러한 사례 클래스들 중 하나의 객체를 취하고 어떤 행동을 취하는 것과 같은 일반적인 함수를 만들기 위해 노력하고있다. 다음은 부분 코드입니다.일반 함수 만들기 및 TypeOf 사용하기
def getType[T: TypeTag](obj: T) = typeOf[T]
def makeXMLElem[T <: Contract](contract: T): String = {
println(getType(contract))
val symb = getType(contract).declaration(newTermName(name)).asTerm
val instanceMirror = runtimeMirror(contract.getClass.getClassLoader).reflect(contract)
val symbMirror = instanceMirror.reflectField(symb)
val symbValue = symbMirror.get
.......
이제 '크기'를 전달하고 형식을 확인하려고합니다. getType 함수는 'scale'이 아닌 'contract'이되도록 형식을 반환합니다. 당신이, 내가 문 사용하는 경우 클래스 '규모'의 매개 변수에 액세스하려고 이해할 수 있듯이 : 이후
case class scale(amount:Int, currency:String)
의 :
val symb = getType(contract).declaration(newTermName(name)).asTerm
경우 클래스 '규모'를 다음 서명이 자체가 잘못 추출되는 입력 값 'SYMB은'어떤 가치를 부여하지 않고, 나는 다음과 같은 런타임 오류 얻을 : 손실 오없이
Caused by: scala.ScalaReflectionException: <none> is not a term
가 어떻게 기능 makeXMLElem가 더 일반적인 만들 수 있습니다 '규모'의 서명 또는 그 문제에 대해 '계약'을 확장하는 클래스에 관한 정보?