【问题标题】:Extend a generic class dynamically in Java在 Java 中动态扩展泛型类
【发布时间】:2013-05-29 11:25:20
【问题描述】:

我需要在运行时扩展一个具有通用签名的类。

例如要扩展的类是:

public class A<T> {}

我需要动态获取:

public class B extends A<String> {}

我无法使用代理,因为我需要将获得的类添加到 ClassLoader。我正在尝试使用 javassist,但我不知道如何以正确的方式制作它。

【问题讨论】:

  • 您真正想要解决的问题是什么?
  • @NilsH 我正在为 Hadoop 开发一个框架。 Hadoop 要求您扩展一个定义一些泛型类型的 Mapper 类。对于我的框架,我无法在运行前知道正确的类型,所以我需要一种方法来仅在运行时扩展类 Mapper。

标签: java dynamic reflection


【解决方案1】:

如果您只在运行时知道类型,那么您将不得不使用强制转换。 喜欢:

 class TokenCounterMapper 
    extends Mapper<Object, Object, Object, Object>{
     public void map(Object key, Object value, Context context){
    if (value instanceOf String){    
String castedString = (String)value;
        ...
        }
        }
        }

【讨论】:

  • 问题是我在通信过程中使用 Avro 序列化我的对象。 Avro 只有在类定义明确的情况下才能自动工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多