采用javassist 如何在CtClass中添加泛型字段?

人间处处是BUG 发布于 2015/12/21 17:14
阅读 3K+
收藏 1
ClassPool cp=ClassPool.getDefault();
CtClass cc=cp.makeClass("com.dynamic.User");
CtField cf=CtField.make("private java.util.List<Object> roles;", cc);//这里要抛出编译异常
cc.addField(cf);
加载中
0
ksfzhaohui
ksfzhaohui
泛型类对象在编译器会全部变成普通类对象,jvm本身是没有泛型的概念
人间处处是BUG
人间处处是BUG
好吧。我的必须要List<>
0
Sub
Sub

javassist 没有泛型支持,自己做 check 和 type cast

人间处处是BUG
人间处处是BUG
不懂。是取得时候强制转换吗
0
xpbob
xpbob
貌似没有这个功能,但是你加入的是object,list默认的也是object,正好
xpbob
xpbob
@人间处处是BUG 我不知道你的需求是list<>但是,你写list也能编译过去,而且传递值的时候也没有问题啊
人间处处是BUG
人间处处是BUG
必须list<>
0
b
bei_b

楼主有解决这个问题吗?  最后怎么实现的

0

泛型是编译期的东西,  字节码是运行期的,javassits 动态生成字节码是属于运行期的,泛型已经被擦除了,就不应该存在泛型了

你要是想运行期动态生成一个全新的class,还有泛型约束什么的,可以考虑用 JavaCompiler 动态编译,但是这个不支持对已有的class增强功能,只能实现新增class,然后因为是需要现编译的,编译时的耗时也比较高

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部