gpt4 book ai didi

java - 我如何从编译单元实例化一个对象

转载 作者:行者123 更新时间:2023-12-01 04:49:29 25 4
gpt4 key购买 nike

我正在尝试开发一个插件,它从java文件生成测试和表类...当我选择Java源时,我将能够有一个选项“生成类测试”,这是我遇到的问题将 Java 文件恢复为 ICompliationUnit,然后我有一个方法可以提取对象的方法,这就是原因;我想将 IComplilationUnit 解析为代表的类的实例,我尝试使用 Class.forName 但它不起作用,这就是代码:

 private void write(String dir, ICompilationUnit cu) throws JavaModelException
{

try
{
cu.getCorrespondingResource().getName();
System.out.println("0000000000000" + cu.getJavaProject().getProject().toString());
}
catch (JavaModelException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
String test = cu.getCorrespondingResource().getName();
IPackageDeclaration[] test1 = cu.getPackageDeclarations();
// Need
String[] name = test.split("\\.");

String contentFile = dir + "\\" + name[0] + "content.txt";
GenerateFitnessTable inst = new GenerateFitnessTable();
try
{

String pack = test1[0].toString().substring(7, test1[0].toString().indexOf("[") - 1) + "." + name[0];
@SuppressWarnings("rawtypes")
Class classe = Class.forName(cu.getJavaProject().getProject().toString()
.substring(cu.getJavaProject().getProject().toString().indexOf("/"), cu.getJavaProject().getProject().toString().length())
+ pack);
try
{
classe.newInstance();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

catch (ClassNotFoundException e1)
{
System.out.print("****************************la classe n'existe pas");
}
try
{
inst.generateContent(cu, contentFile);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

这是正确的方法;)),我找到了它:

 // nouveau region
region = JavaCore.newRegion();
// ajout de la classe selectionné a cette region
region.add(cu);

if (JavaCore.getGeneratedResources(region, true).length == 0)
{
// bug

}
// recuperer l'url de .class
String url = "file:" + JavaCore.getGeneratedResources(region, true)[0].getLocation().makeAbsolute();
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
InputStream input = connection.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int data = input.read();

while (data != -1)
{
buffer.write(data);
data = input.read();
}

input.close();

byte[] classData = buffer.toByteArray();

clas = defineClass(pack.substring(1, pack.length()), classData, 0, classData.length);

关于java - 我如何从编译单元实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15229233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com