如果我指定了一个返回泛型类的方法,那我该怎么做,而不是动态地指定泛型的类型? 例如
try {
Class c =Class.forName(keytype);
Class d= Class.forName(valuetype);
KafkaConsumer<c,d> consumerconsumer = new KafkaConsumer<c,d>(PropertiesUtil.getPropsObj(configPath));
return consumer ;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
但是上面的代码不正确。我该怎么做才能实现目标?
答案 0 :(得分:2)
通用语法仅在编译时有效。通用类或方法中的所有类型在运行时均不可用。这称为type erasure。因此,您不能做自己想做的事情,至少不是这样。
根据您要解决的原始问题,您也许可以改用wildcards。
答案 1 :(得分:2)
您可以让您的键和值类分别实现一个已知的接口。 然后,您可以分配或投射它。
KafkaConsumer<IKeyType,IValueType> consumerconsumer = new KafkaConsumer<>(PropertiesUtil.getPropsObj(configPath));
或
KafkaConsumer<IKeyType,IValueType> consumerconsumer1 = (KafkaConsumer<IKeyType,IValueType>) new KafkaConsumer(PropertiesUtil.getPropsObj(configPath));
在此处阅读有关在泛型上加界限的信息。 https://docs.oracle.com/javase/tutorial/java/generics/wildcards.html