如何将类类型作为参数传递?
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;
}
我想分别用参数TestMapper.class
和DatastoreInputFormat.class
替换值mapper
和format
。
我不确定如何从Object
转换为TestMapper.class
。
答案 0 :(得分:1)
getConfig()的参数应该首先包含Class类型而不是Object。但是:
如果您想要任何映射器和格式对象的运行时类,只需调用它们的.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相同的对象。
如果您的mapper
和parameter
已经是.class对象,即您已将方法调用为foo.getConfig(TestMapper.class,DatastoreInputFormat.class);
,则可以将对象强制转换为Class对象,假设为conf。 setClass()接受Class<?>
类型:
conf.setClass("mapreduce.map.class",(Class<?>)mapper, Mapper.class);
conf.setClass("mapreduce.inputformat.class",(Class<?>)format,InputFormat.class);
答案 1 :(得分:0)
不幸的是,目前还不清楚Configuration.setClass()
的原型是什么。如果是Configuration.setClass(String, Class, Class)
,您可以通过强制转换从对象转换为类:(Class)mapper
和(类)格式`。
虽然这是一个糟糕的风格,因为所有的铸造...为什么getConfig()接收对象?可能它应该接收类型Class的参数?在这种情况下,您甚至根本不需要任何铸造。