复制类时,软件包名称已损坏

问题描述 投票:-1回答:1

我如下定义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反编译类文件时,看到软件包名称损坏。

java javassist
1个回答
0
投票

也许getAndRename方法不符合您的要求。

从官方文档:http://www.javassist.org/tutorial/tutorial.html

更改用于定义新类的类名称

新类可以定义为现有类的副本。下面的程序可以做到这一点:

ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("Point");
cc.setName("Line");
© www.soinside.com 2019 - 2024. All rights reserved.