日期:2014-05-20  浏览次数:20870 次

javassist导入问题
我用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的,就是没看到效果.
向各位请教啦!
------解决方案--------------------
cp.importPackage("com.j2me.ConvKey"); 
cp.clearImportedPackages();

这两个function有吗?  ClassPool 里没找到啊~      
------解决方案--------------------
有的,你仔细看下就知道了.
------解决方案--------------------
import 语法只存在于源码中
对于编译之后的class文件,class的引用都是全名的,不存在import不import的问题

不知道"本想删除一些不再使用的import内容而新增一个import的,就是没看到效果. "这种需求是如何来的
------解决方案--------------------
而且2个函数 importPackage和clearImportedPackages都是操作ClassPool的,这个和class文件里引用的类没有直接关系吧
------解决方案--------------------
举个例子,假如我想替换类中的"Canvas",那我就得删除"import javax.microedition.lcdui.Canvas"这句,而我想替换的新类"newCanvas"我就得"ipmort newCanvas",是这个意思.
------解决方案--------------------
就是比如我想通过javassist新生成一个类A,而A中用到了某个类比如Element,这个类比如通过在A类开头import Element这个类之后类A才能编译通过。否则会报A中找不到类Element的错误。
遇到同样问题了,求高手指点。