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
的类型信息存储在classRDD
中,也许您可以从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])