[英]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;
}
我想分别用参数mapper
和format
替换值TestMapper.class
和DatastoreInputFormat.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。
如果您的mapper
和parameter
已经是 .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.