gpt4 book ai didi

java - 使用 ClassTag 获取包含泛型类型

转载 作者:行者123 更新时间:2023-11-30 07:04:09 26 4
gpt4 key购买 nike

我知道 guava 的 TypeToken 可以做到这一点:

class C[I, O]    

class A[T] {
val tok = new TypeToken[T](getClass){}
}

val a = new A[C[Integer, String]]{}
println(a.tok) // somepackage.C<java.lang.Integer, java.lang.String>

但是使用 scala 的 ClassTag,我得到:

class B[T: ClassTag] {
// runtime class
val clazz = implicitly[ClassTag[T]].runtimeClass
// also tries to construct a guava type token
val tok = TypeToken.of(clazz).asInstanceOf[TypeToken[T]]
}

val b = new B[C[Integer, String]]
println(b.clazz) // class somepackage.C
println(b.tok) // somepackage.C

所以有了ClassTag,C所包含的遗传类型就丢失了。是否有可能在 scala 中使用 ClassTag 或其他东西获得 somepackage.C?

谢谢!

最佳答案

我想你想要 TypeTagtypeOf

import scala.reflect.runtime.universe._

class C[I, O]

class A[T: TypeTag] {
val tpe = typeOf[T]
}

val a = new A[C[Integer, String]]
println(a.tpe) // C[java.lang.Integer,String]

关于java - 使用 ClassTag 获取包含泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com