我的代码是:
public static <K, V> void initMapperJob( Job job,
Collection<WebPage.Field> fields, Class<K> outKeyClass, Class<V>
outValueClass, Class<? extends GoraMapper<String, WebPage, K, V>> mapperClass,
Class<? extends Partitioner<K, V>> partitionerClass, boolean reuseObjects)
throws ClassNotFoundException, IOException {
DataStore<String, WebPage> store = createWebStore(job.getConfiguration(), String.class, WebPage.class );
........
}
我改变如下:
public static <K, V, P extends PersistentBase, F extends Fields> void initMapperJob(Job job,
Collection<F> fields,
Class<K> outKeyClass, Class<V> outValueClass,
Class<? extends GoraMapper<String, P, K, V>> mapperClass,
Class<? extends Partitioner<K, V>> partitionerClass, boolean reuseObjects)
throws ClassNotFoundException, IOException {
DataStore<String, P> store = createWebStore(job.getConfiguration(),
String.class, P.class );
....
}
我的问题是:如何通过java为以下行设置泛型类?
DataStore store = createWebStore(job.getConfiguration(), String.class, P.class );
如果我这样设置(P.class或P),就会发生错误。
调用以下方法。
public static <K, V extends Persistent> DataStore<K, V> createWebStore(Configuration conf,
Class<K> keyClass, Class<V> persistentClass){...}
最佳答案
您需要添加 Class<P>
类型的参数并使用它(而不是 P.class)。然后您需要转到 initMapperJob()
的站点并将该额外参数添加到调用中。
public static <K, V, P extends PersistentBase, F extends Fields>
void initMapperJob(Job job,
Collection<F> fields,
Class<K> outKeyClass, Class<V> outValueClass,
Class<? extends GoraMapper<String, P, K, V>> mapperClass,
Class<? extends Partitioner<K, V>> partitionerClass,
boolean reuseObjects,
Class<P> pClass) throws ClassNotFoundException, IOException {
DataStore<String, P> store = createWebStore(job.getConfiguration(),
String.class, pClass);
....
}
关于java - 如何设置类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815218/