簡體   English   中英

Java-如何將泛型類型的類傳遞給方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM