我如下定义Point类。
package com.sample.app.model;
public class Point {
public int x;
public int y;
}
[当我尝试使用Point类数据构造其他类时,我看到包名称已损坏。
CtClass pointClass = classPool.getAndRename("com.sample.app.model.Point", "com.sample.app.model.MyPoint");
生成的MyPoint.class代码如下。
package model;
public class MyPoint {
public int x;
public int y;
}
如您在上面的片段中所见,程序包名称是作为模型给出的,而不是“ com.sample.app.model”。
令人惊讶的是,当我打印新的类名称时,它会正确打印程序包名称。
Class<?> myPointClass = pointClass.toClass();
System.out.println(myPointClass.getName());
但是当我使用Java decompiler反编译类文件时,看到软件包名称损坏。
也许getAndRename方法不符合您的要求。
从官方文档:http://www.javassist.org/tutorial/tutorial.html
更改用于定义新类的类名称
新类可以定义为现有类的副本。下面的程序可以做到这一点:
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("Point");
cc.setName("Line");