javassist导入问题

laigb 2009-09-04 11:21:00
我用javassist编辑class文件,
我做方法的重命名没有问题,
类名的替换时我用类的完整路径"com.mypackage.myclass"时会自动import这个包名.
但是我想在其它的类中自行impotr一个包名却不行,如下代码:

ClassPool cp=ClassPool.getDefault();
try{
CtClass ctc=cp.get("midlet");

//TODO 导入包的引用
cp.importPackage("com.j2me.ConvKey");

//TODO 删除Canvas包的引用
cp.clearImportedPackages();

ctc.writeFile();//保存修改
System.out.println("主类修改完成!");
}catch(Exception ex){
System.out.println(修改失败!"+ex.getMessage().toString());
}

在这里新增导入和删除导入都没有效果,我本想删除一些不再使用的import内容而新增一个import的,就是没看到效果.
向各位请教啦!
...全文
767 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jerry_liu20080504 2012-07-05
  • 打赏
  • 举报
回复
就是比如我想通过javassist新生成一个类A,而A中用到了某个类比如Element,这个类比如通过在A类开头import Element这个类之后类A才能编译通过。否则会报A中找不到类Element的错误。
遇到同样问题了,求高手指点。
laigb 2009-09-07
  • 打赏
  • 举报
回复
举个例子,假如我想替换类中的"Canvas",那我就得删除"import javax.microedition.lcdui.Canvas"这句,而我想替换的新类"newCanvas"我就得"ipmort newCanvas",是这个意思.
「已注销」 2009-09-04
  • 打赏
  • 举报
回复
而且2个函数 importPackage和clearImportedPackages都是操作ClassPool的,这个和class文件里引用的类没有直接关系吧
「已注销」 2009-09-04
  • 打赏
  • 举报
回复
import 语法只存在于源码中
对于编译之后的class文件,class的引用都是全名的,不存在import不import的问题

不知道"本想删除一些不再使用的import内容而新增一个import的,就是没看到效果. "这种需求是如何来的
laigb 2009-09-04
  • 打赏
  • 举报
回复
有的,你仔细看下就知道了.
fengyud 2009-09-04
  • 打赏
  • 举报
回复
cp.importPackage("com.j2me.ConvKey");
cp.clearImportedPackages();

这两个function有吗? ClassPool 里没找到啊~

13,097

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧