首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用反射的avro SpecificRecord的KafkaConsumer泛型类型

使用反射的avro SpecificRecord的KafkaConsumer泛型类型
EN

Stack Overflow用户
提问于 2020-12-22 22:43:24
回答 3查看 184关注 0票数 2

我想使用反射加载的类来初始化KafkaConsumer泛型类型。这些类将通过avro-tools生成,并将扩展SpecificRecordBase类。我知道,我可以用通配符做一些事情-

代码语言:javascript
复制
KafkaConsumer<? extends SpecificRecordBase, ? extends SpecificRecordBase> consumer = new KafkaConsumer<>(properties);

但是,我要找的是-

代码语言:javascript
复制
Class keyClass = Class.forName("com.test.KeyClass");
Class valueClass = Class.forName("com.test.ValueClass");
KafkaConsumer<keyClass, valueClass> consumer = new KafkaConsumer<>(properties);

如有任何建议,我们将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-12-29 21:59:29

由于类型参数的存在只是为了方便程序员,在运行时它们将被擦除,因此,通过反射加载它们是没有意义的。

但是,你可以将它转换为所需的类型,例如

代码语言:javascript
复制
Consumer<KeyClass, ValueClass> consumer = new KafkaConsumer<>(properties);
票数 0
EN

Stack Overflow用户

发布于 2020-12-31 19:36:46

我不确定,但以下内容是否满足您的要求--

代码语言:javascript
复制
public Consumer<?,?> getConsumer(Class<?> keyClass,Class<?> valClass,
                                   Properties props){
    props.put(deserializer properties of keyClass);
    props.put(deserializer properties of valClass);
   //other releavant props 
   return new KafkaConsumer<>(props);
}
  ..
   caller(){
   Class<?> keyClass=Class.forName("KeyClass");
   Class<?> valClass=Class.forName("ValClass");
   KafkaConsumer<?,?> con=(KafkaConsumer<?,?>)getConsumer(keyClass,valClass,props);
} 
票数 0
EN

Stack Overflow用户

发布于 2021-01-01 09:52:25

设置一个单独的任务来构建和发布schema jar (我建议将它们放在一个单独的repo中,并使用它自己的构建)。然后通过Gradle/Maven拉入依赖项,您将拥有实际的类型,而反射应该不是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65410694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档