1

我一直在研究一个在方法中注入内部类的处理器,在弄清楚如何生成类和伴随的对象初始化而不导致自动生成不正确的完全限定名称时遇到了很多麻烦.

例如,我一直在处理以下内容:我一直在创建一个新课程:

CtClass internal = getFactory().Core().createClass();

然后将其插入方法中的元素之前

element.insertBefore(internal);

但是当我做一个初始化声明时:

CtConstructorCall call = getFactory().Core().createConstructorCall();
call.setType(internal);
internal.insertAfter(call);

我接到一个看起来像这样的电话:

Main.internal initializedInternalObject = new Main.internal();

Main尽管internal仅在特定方法中声明,但所有内容都在其中的整个类的名称在哪里。我已经尝试对内部类使用 getFactory().Class().create() 方法,但该方法似乎只针对嵌套在类中的类,而不是在方法中定义的类。

我对类声明做错了吗?我只是遇到了勺子生成内部类的能力的限制吗?有什么建议么?

感谢大家!

4

2 回答 2

0

一种可能的解决方案是在内部类名称前面加上一个数字。

这行得通吗?

不要犹豫,使用Github 问题报告奇怪的行为。

于 2016-08-12T14:00:57.347 回答
0

尽管它有点像 hack,但代码片段表达式允许手动覆盖涉及给定内部类的类型名称和构造函数调用的表达式。例如:

String constructorCallSnippet = 
    "new " + classType.toString() + "(" 
    + String.join(", ", args.stream().map(a -> a.toString()).collect(toList()))
    + ")";
CtExpression constructorCall =
    getFactory().Code().createCodeSnippetExpression(constructorCallSnippet);
于 2016-08-15T03:56:44.887 回答