[SCALA] 스칼라 - 케이스 클래스를 사용하여 없음 TypeTag 가능한 예외 TypeTag을 얻기 위해 시도?
SCALA스칼라 - 케이스 클래스를 사용하여 없음 TypeTag 가능한 예외 TypeTag을 얻기 위해 시도?
나는 API를 반영 스칼라보고 그리고 난 예외를 많이 받고 있어요.
문서 참조 : http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html
어떻게 일반에서 typetag을받을 수 있나요?
def getChildSettings[T: ru.TypeTag](path: String, settingsParameterObject: T) = {
import scala.reflect.runtime.{ currentMirror => m }
val m = ru.runtimeMirror(getClass.getClassLoader)
val classC = ru.typeOf[T].typeSymbol.asClass
}
나는 예외를 얻을 :
No TypeTag available for ParameterObject.type
심지어 아주 간단한 예제 (는 REPL에서하는 편집 예)를 작동하지 않는 것
import scala.reflect.runtime.universe._
import scala.reflect.runtime.currentMirror
import scala.reflect.runtime.{universe => ru}
def getTypeTag[T: ru.TypeTag](obj: T) = ru.typeTag[T]
case class ParameterObject(stringType: String, optionType: Option[String])
getTypeTag(ParameterObject)
나는이 메소드를 호출하고있어 방법에 대한 그것의 일을 추측하고있어.
해결법
-
==============================
1.나는 마지막으로 문제가 무엇인지 알게되었습니다. 케이스 클래스는 최상위 레벨을 정의해야합니다 -가 중첩 될 수 없습니다. 이런 식으로 뭔가가 실패합니다.
나는 마지막으로 문제가 무엇인지 알게되었습니다. 케이스 클래스는 최상위 레벨을 정의해야합니다 -가 중첩 될 수 없습니다. 이런 식으로 뭔가가 실패합니다.
class Foo { describe("getSettings") { case class ParameterObject(foo: String) settings.getTypeTag(path, ParameterObject) } } class Clazzy { def getTypeTag[T: TypeTag](obj: T) = ru.typeTag[T] }
-
==============================
2.중첩 된 클래스의 태그를 입력해야하는 경우 WeakTypeTag를 사용할 수 있습니다. 왜 그런지 모르겠지만, 그것은 의도적으로입니다.
중첩 된 클래스의 태그를 입력해야하는 경우 WeakTypeTag를 사용할 수 있습니다. 왜 그런지 모르겠지만, 그것은 의도적으로입니다.
-
==============================
3.당신은 메인 클래스를 실행하기 전에 케이스 클래스를 선언하십시오
당신은 메인 클래스를 실행하기 전에 케이스 클래스를 선언하십시오
예
case class Person(name: String, age: Long) def main(args: Array[String]) { ... val people = sc.textFile("C:\\winutils\\people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
-
==============================
4.당신의 pom.xml에이 코드를 추가합니다
당신의 pom.xml에이 코드를 추가합니다
<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-reflect</artifactId> <version>2.12.0-M4</version> </dependency>
-
==============================
5.그 삭제를 해결하려면 방법이기 때문에 당신은 컴파일시에 TypeTag이 필요합니다 :
그 삭제를 해결하려면 방법이기 때문에 당신은 컴파일시에 TypeTag이 필요합니다 :
import scala.reflect.runtime.{currentMirror => m, universe => ru} def getChildSettings[T: TypeTag](path: String, settingsParameterObject: T) = { val tpe = ru.typeOf[T] // val classC = tpe.typeSymbol.asClass val ctor = tpe.declaration(ru.nme.CONSTRUCTOR).asMethod ... }
반사에 대한 스칼라 문서 개요 받고 생성자를 호출하는 예를 제공합니다.
from https://stackoverflow.com/questions/16988558/scala-no-typetag-available-exception-when-using-case-class-to-try-to-get-typet by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면? (0) | 2019.11.21 |
---|---|
[SCALA] 스파크 벡터 열에 첨부 메타 (0) | 2019.11.21 |
[SCALA] 왜 스칼라는 재귀 함수의 반환 형식을 필요로 하는가? (0) | 2019.11.21 |
[SCALA] 스파크 2.X와 스칼라 2.12를 사용하여 (0) | 2019.11.21 |
[SCALA] 스칼라에서 가변 길이 인수 목록의 유형은 무엇입니까? (0) | 2019.11.21 |