繁体   English   中英

如何将泛型类型('Object myVar')作为参数传递来替换 class 类型('SomeClass.class')?

[英]How do you pass a generic type ('Object myVar') as a parameter to replace a class type ('SomeClass.class')?

如何将 class 类型作为参数传递?

public Configuration getConfig(Object mapper, Object format) {
    Configuration conf = new Configuration(false);
    conf.setClass("mapreduce.map.class", TestMapper.class, Mapper.class);
    conf.setClass("mapreduce.inputformat.class", DatastoreInputFormat.class, InputFormat.class);
    return conf;
}

我想分别用参数mapperformat替换值TestMapper.classDatastoreInputFormat.class

我不确定如何从Object转换为TestMapper.class

getConfig() 的参数应该首先输入 Class 类型而不是 Object 类型。 然而:

如果你想要运行时 class 无论你的映射器和格式对象是什么,只需调用 their.getClass() 方法。

 conf.setClass("mapreduce.map.class",mapper.getClass(), Mapper.class);
 conf.setClass("mapreduce.inputformat.class",format.getClass(),InputFormat.class);

因此,如果您的mapper方法参数实际上是 TestMapper 的一个实例,则 mapper.getClass() 将返回与 TestMapper.class 相同的 object。

如果您的mapperparameter已经是 .class 对象,即您已将该方法称为foo.getConfig(TestMapper.class,DatastoreInputFormat.class); 您可以将您的对象转换回 Class object,假设 conf.setClass() 采用Class<?>类型:

conf.setClass("mapreduce.map.class",(Class<?>)mapper, Mapper.class);
conf.setClass("mapreduce.inputformat.class",(Class<?>)format,InputFormat.class);

不幸的是,尚不清楚Configuration.setClass()的原型是什么。 如果它是Configuration.setClass(String, Class, Class)你可以从 Object 转换为 Class 通过转换: (Class)mapper和 (Class)format`。

虽然它是一种糟糕的风格,因为所有的铸造......为什么 getConfig() 接收对象? 可能应该收到 Class 类型的 arguments 吗? 在这种情况下,您甚至根本不需要任何铸造。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM