首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

javassist导入有关问题

2012-12-21 
javassist导入问题我用javassist编辑class文件,我做方法的重命名没有问题,类名的替换时我用类的完整路径c

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的错误。
遇到同样问题了,求高手指点。

热点排行