Java - 如何将泛型类型的类传递给方法

标签 java scala generics

JavaSparkContext.newAPIHadoopRDD 中的方法以类作为参数。

在 scala 中我可以使用这样的方法:

sc.newAPIHadoopRDD(job.getConfiguration,
      classOf[AvroKeyInputFormat[AvroFlumeEvent]],
      classOf[AvroKey[AvroFlumeEvent]],
      classOf[NullWritable])

我如何在java中做到这一点?

我如何通过AvroKeyInputFormat<AvroFlumeEvent>的类(class)进入方法。

我得到的最接近的是:

        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> 类。

关于Java - 如何将泛型类型的类传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601788/

相关文章:

java - 从另一个类对象访问一个类的对象

javascript - 从 Angular js表单发布数据时出错

scala - 如何使用平面图分解数据集?

Scala Option(null) 预期为 None 但我得到了 Some(0)

c# - 字符串转泛型c#(Convert string to T)

带链表的 C++ 泛型容器

java - Android Java - 在 For 循环中使用处理程序

Java 字符串到 SHA1

java - SpringMVC + Hibernate - 模型属性和更新

c# - 通用委托(delegate),C# 3.5