Java:通过将类型作为方法参数传递来实例化参数化类

问题描述 投票:0回答:1

我的问题是,有一个名为

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 
  }
}
java generics parameters guava
1个回答
0
投票

鉴于您问题中显示的代码,这是可行的:

public static TypedProducer<?, ?> instantiateTypedProducer(Class<?> keyType, Class<?> valueType) {
    return new TypedProducer<>();
}

我猜想拥有

TypedProducer<?, ?>
(具有未指定的边界)是没有用的。难道你不想以类似
TypedProducer<Integer, String>
的方式结束吗?

© www.soinside.com 2019 - 2024. All rights reserved.