[英]Java - How to pass the class of a generic type into a method
JavaSparkContext.newAPIHadoopRDD中的方法將class作為參數。
在scala中,我可以使用如下方法:
sc.newAPIHadoopRDD(job.getConfiguration,
classOf[AvroKeyInputFormat[AvroFlumeEvent]],
classOf[AvroKey[AvroFlumeEvent]],
classOf[NullWritable])
我如何在Java中做到這一點?
如何將AvroKeyInputFormat<AvroFlumeEvent>
的類傳遞給方法。
我最接近的是:
Class<AvroKeyInputFormat<AvroFlumeEvent>> inputFormatClass;
Class<AvroKey<AvroFlumeEvent>> keyClass;
JavaPairRDD<AvroKey<AvroFlumeEvent>, NullWritable> flumeEvents = sc.newAPIHadoopRDD(hadoopConf,
inputFormatClass,
keyClass,
NullWritable.class);
但是,現在正在抱怨inputFormatClass可能尚未初始化。 我想我缺少了什么...
Java中的變量要么為null
,要么為實例。 您的變量inputFormatClass
既不為null
也不為實例,因此在對其進行初始化之前您無法對其進行任何操作。 這就是它所抱怨的。
至於傳遞類,您可以執行以下操作:
Class<AvroKeyInputFormat> clazz = AvroKeyInputFormat.class
通用類型不會在運行時存儲-它們僅用於驗證。 這就是為什么您不能擁有AvroKeyInputFormat<AvroFlumeEvent>
類的AvroKeyInputFormat<AvroFlumeEvent>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.