Java - 如何将泛型类转换为方法

时间:2016-01-04 23:33:04

标签: java scala generics

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可能尚未初始化。我想我错过了什么......

1 个答案:

答案 0 :(得分:1)

Java中的变量是null或实例。您的变量inputFormatClass既不是null也不是实例,因此在初始化之前,您无法对其执行任何操作。这就是它所抱怨的。

至于上课,你可以这样做:

Class<AvroKeyInputFormat> clazz = AvroKeyInputFormat.class

通用类型不会在运行时存储 - 它们仅用于验证。这就是为什么你不能拥有AvroKeyInputFormat<AvroFlumeEvent>

的课程的原因