我的问题是,有一个名为
TypedProducer<K, V>
的通用类用于键和值,我必须从配置中实例化它(假设有人告诉我在运行时配置中键是 Integer
,值是 String
,但是它可以是任何 Object
子类型)所以我事先不知道类型。
如何通过传递参数来实例化
TypedProducer
?或者甚至首先从 SourceTypedClassProvider<keyType, valueType>
对象创建 .class
?
public class SourceTypedClassProvider {
public static TypedProducer<?, ?> instantiateTypedProducer(
Class<?> keyType, Class<?> valueType) {
//should return instance of TypedProducer<keyType, valueType>
}
}
我知道番石榴中有类似
TypeToken
的东西,但是在这种情况下,当必须首先从配置中获取类型时,它对我有帮助吗?
编辑: 老实说,
TypedProducer
的实现不应该产生任何影响(你可以将其视为我正在实例化,例如Map<K, V>
),但如果它使下面的实现部分变得更容易:
public class TypedProducer<K, V> {
ExternalApiProducer<K, V> externalApiProducer;
public TypedProducer() {
externalApiProducer = new ExternalApiProducer<>();
}
public Map<K, V> produceRecords() {
//some code that calls externalApiProducer to produce records
}
}
鉴于您问题中显示的代码,这是可行的:
public static TypedProducer<?, ?> instantiateTypedProducer(Class<?> keyType, Class<?> valueType) {
return new TypedProducer<>();
}
我猜想拥有
TypedProducer<?, ?>
(具有未指定的边界)是没有用的。难道你不想以类似TypedProducer<Integer, String>
的方式结束吗?