如何通过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中的泛型只在编译之前帮助您实现类型安全。看什么。