Scala 没有可用于T的类标记

Scala 没有可用于T的类标记,scala,Scala,从控制台接受此语句。但是,在编译时会引发以下错误: import org.apache.spark.api.java.JavaRDD import org.apache.spark.rdd.RDD import scala.reflect.ClassTag class TestRDD[T: ClassTag](rdd: RDD[T]) extends JavaRDD(rdd) 由于jvm模板类型擦除,编译器无法从rdd获取t的类型信息 但是T的类型信息存储在classRDD中,也许您可以

从控制台接受此语句。但是,在编译时会引发以下错误:

import org.apache.spark.api.java.JavaRDD
import org.apache.spark.rdd.RDD
import scala.reflect.ClassTag  

class TestRDD[T: ClassTag](rdd: RDD[T]) extends JavaRDD(rdd)

由于jvm模板类型擦除,编译器无法从
rdd
获取
t
的类型信息

但是
T
的类型信息存储在class
RDD
中,也许您可以从
RDD
class

中获取
T
的类标签,我想您需要这个:

No ClassTag available for T
[error] class TestRDD[T: ClassTag](rdd: RDD[T]) extends JavaRDD(rdd)
[error]                ^
[error] one error found
[error] (jobs/it:compileIncremental) Compilation failed

使用
implicit
自动隐式显示genericT

ClassTag
,这就是尴尬的解决方案:

class TestRDD[T](rdd: List[T])(implicit c: ClassTag[T]) extends JavaRDD(rdd)
class TestRDD[T: ClassTag](rdd: RDD[T]) extends RDD[T](rdd: RDD[T])