gpt4 book ai didi

java - 右侧 singleton.getinstance() 赋值所需的 CodeModel 帮助

转载 作者:行者123 更新时间:2023-11-29 08:16:00 24 4
gpt4 key购买 nike

我已经能够使用 CodeModel API 生成我需要的 99%,但我在这里遇到了困难...

使用各种“directXX”方法不会在生成的代码中添加导入语句,除了生成类中的一个地方外,我可以在没有“directXXX”类型方法的情况下工作。

假设我想要一个生成的方法,例如:

/**
* Copies data from this Value-Obj instance, to the returned PERSON instance.
*
* @return PERSON
*
*/
public PERSON mapVOToPERSON() throws MappingException
{
Mapper mapper = (com.blah.util.MapperSingleton.getMapperInstance());
return mapper.map(this, PERSON.class);
}

您可以在括号中看到 Mapper 分配的右侧。发出整个包+类是我能找到的唯一方法,只需在右侧声明“SomeSingleton.someMethod()”并编译生成的代码。如果没有将 MapperSingleton 添加到对象模型,则不会生成任何导入...

问题:

1) 有没有办法强制生成导入?

2) 如何声明一个表达式,在对象模型中给出 Mapper 赋值的右侧(以便生成 MapperSingleton 的导入。

感谢任何帮助...

最佳答案

也许我没有完全理解这个问题,但是,这样的代码可以吗?

JCodeModel model = new JCodeModel();
JClass mapper = model.directClass("com.another.Mapper");
JClass factory = model.directClass("com.another.MapperSingleton");
JDefinedClass dc = model._class("com.example.Something");
JMethod method = dc.method(JMod.PUBLIC | JMod.STATIC, mapper, "testMethod");
method.body()._return(factory.staticInvoke("getMapperInstance"));
model.build(destinationDirectory);

会生成

package com.example;

import com.another.Mapper;
import com.another.MapperSingleton;

public class Something {


public static Mapper testMethod() {
return MapperSingleton.getMapperInstance();
}

}

这是 CodeModel 2.4

编辑!第二次尝试

    JCodeModel model = new JCodeModel();
JClass mapper = model.directClass("com.blah.util.Mapper");
JClass factory = model.directClass("com.blah.util.MapperSingleton");
JDefinedClass dc = model._class("com.example.Something");
JDefinedClass person = model._class("com.example.PERSON");
JMethod method = dc.method(JMod.PUBLIC, person, "mapVOToPERSON");
JBlock block = method.body();
JVar lhs = block.decl(mapper, "mapper", factory.staticInvoke("getMapperInstance"));
JInvocation map = lhs.invoke("map");
map.arg(JExpr._this());
map.arg(person.dotclass());
method.body()._return(map);
model.build(destinationDirectory);

生成

package com.example;

import com.blah.util.Mapper;
import com.blah.util.MapperSingleton;

public class Something {


public PERSON mapVOToPERSON() {
Mapper mapper = MapperSingleton.getMapperInstance();
return mapper.map(this, PERSON.class);
}

}

关于java - 右侧 singleton.getinstance() 赋值所需的 CodeModel 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851937/

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