如何从字符串中获取ClassTag作为类型参数传递给Scala函数?
我有一个Scala函数,定义如下如何从字符串中获取ClassTag作为类型参数传递给Scala函数?,scala,type-inference,Scala,Type Inference,我有一个Scala函数,定义如下 def func[V: ClassTag, VD <: kafka.serializer.Decoder[V]](implicit tag: ClassTag[VD]) = {} 但是我怎么称呼这个函数呢 val vClassStr = "java.lang.String" val vDClassStr = "kafka.serializer.StringDecoder" 我更喜欢键入证据参数,因此我将上面的内容写成: def func[V, VD &
def func[V: ClassTag, VD <: kafka.serializer.Decoder[V]](implicit tag: ClassTag[VD]) = {}
但是我怎么称呼这个函数呢
val vClassStr = "java.lang.String"
val vDClassStr = "kafka.serializer.StringDecoder"
我更喜欢键入证据参数,因此我将上面的内容写成:
def func[V, VD <: kafka.serializer.Decoder[V]](data: Int)(implicit tag: ClassTag[VD])
我认为您的示例中存在一些语法问题
编辑:如果只需要从字符串构造类型,只需使用Java中的Class.forName
func(v: String, vd: String, data: Int) = {
val clz1 = Class.forName(v)
val clz2 = Class.forName(vd)
// etc
}
我纠正了问题中的语法。另外,我不明白如何使用你的解决方案调用我的函数,如果类的名称为。您能详细说明一下吗?如果您需要从字符串构造它,您可以只使用
Class.forName(“classname”)
。ClassTag
类型用于捕获通过擦除删除的信息,而不是将字符串转换为Class
。我需要将类类型传递到函数类型参数列表func[Class.forName(“java.lang.String”)、Class.forName(“kafka.serializer.StringDecoder”)]
未编译。在我的函数中,我实际上试图调用KafkaUtils
。我需要将V
和T
作为type
参数传递,因此无法执行Class.forName
,这是我的首选。
val tag = classTag[VD]
func(v: String, vd: String, data: Int) = {
val clz1 = Class.forName(v)
val clz2 = Class.forName(vd)
// etc
}