如何通过javassist实现一个包含泛型的接口

如何通过javassist实现一个包含泛型的接口,java,generics,javassist,Java,Generics,Javassist,我想生成一个动态类来执行某些操作,例如: /** *类型转换器。 * *@作者孙浩(孙浩)。java@gmail.com) *@version V1.0 *@createTime 2015-2-9 22:07 */ 公共接口字符串解析{ /** *皈依 * *@param str要转换的数据 *@返回 */ 公共V解析(stringstr); } 现在我想生成一个动态bean。正如我们所看到的,此接口需要一个泛型,如以下代码: CtClass-CtClass=cp.makeClass(“mes

我想生成一个动态类来执行某些操作,例如:

/**
*类型转换器。
*
*@作者孙浩(孙浩)。java@gmail.com)
*@version V1.0
*@createTime 2015-2-9 22:07
*/
公共接口字符串解析{
/**
*皈依
*
*@param str要转换的数据
*@返回
*/
公共V解析(stringstr);
}
现在我想生成一个动态bean。正如我们所看到的,此接口需要一个泛型,如以下代码:

CtClass-CtClass=cp.makeClass(“message.utils.StringParse$”+System.currentTimeMillis());
//创建一个包含类似给定类型*dest的泛型的接口*
CtClass ctInterface=cp.makeInterface(“message.utils.StringParse”);
ctClass.addInterface(ctInterface);
但在执行时,上述代码给出了一个异常:

javassist.CannotCompileException:by java.lang.NoClassDefFoundError:message/utils/StringParse
我认为javassist可能不支持生成泛型。我说得对吗,或者有人能给我一些建议吗?

您可以使用以下方法来实现这一点:

new ByteBuddy()
  .makeInterface()
  .name("StringParse")
  .typeVariable("V")
  .defineMethod("parse",
      TypeDescription.Generic.Builder.typeVariable("V").build(), 
      Visibility.PUBLIC)
  .withParameters(String.class)
  .withoutCode()
  .make();
您可以使用来实现这一点:

new ByteBuddy()
  .makeInterface()
  .name("StringParse")
  .typeVariable("V")
  .defineMethod("parse",
      TypeDescription.Generic.Builder.typeVariable("V").build(), 
      Visibility.PUBLIC)
  .withParameters(String.class)
  .withoutCode()
  .make();

运行时没有泛型。我发现代码可以正确运行,即使没有泛型。javassist不支持泛型吗?正如@BoristheSpider在类级别所说的,由于类型擦除,泛型几乎没有了。换句话说,Java中的泛型只在编译之前帮助您实现类型安全。看什么。运行时没有泛型。我发现代码可以正确运行,即使没有泛型。javassist不支持泛型吗?正如@BoristheSpider在类级别所说的,由于类型擦除,泛型几乎没有了。换句话说,Java中的泛型只在编译之前帮助您实现类型安全。看什么。