gpt4 book ai didi

java - 为 Java 不可变对象(immutable对象)实现 Groovy 构建器的最佳方式

转载 作者:行者123 更新时间:2023-11-29 04:48:38 25 4
gpt4 key购买 nike

我有一个不可变的 Java 对象,如下所示:

public class Entity {
private String field1;
private String field2;

public Entity(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}

public String getField1() {...}
public String getField2() {...}
}

我想在我的测试代码中为那个用 Groovy 编写的类添加一个构建器。为此,我尝试使用 @groovy.transform.builder.Builder。在这里,我无法将实体类更改为产品代码中的实体类,因此我尝试将构建器与 groovy.transform.builder.ExternalStrategy 策略结合使用。

@Builder(builderStrategy = ExternalStrategy, forClass = Entity)
class EntityBuilder {
}

但我不能将它用于不可变对象(immutable对象)。

所以我想知道为不可变 Java 对象实现 groovy 构建器的最佳方法是什么?

最佳答案

不是真正的构建器,但你可以将 List 强制转换为你的类型,只要它有一个可以将 List 项作为参数的构造函数:

def entity = [ 'hi', 'hej' ] as Entity

如果您的类型有一个采用 2 个字符串的构造函数,则此方法有效。

由于您的类型没有 setter,Groovy 无法猜测哪个参数具有哪个名称,因此无法自动生成构建器。

但是,您可以手动编写一些代码以获得一些不错的代码。

例如:

@Builder
class GroovyEntity {
String field1
String field2

def asType( Class type ) {
if ( type == Entity ) {
return new Entity( field1, field2 )
}
super.asType( type )
}
}

你可以这样使用:

Entity entity = GroovyEntity.builder()
.field1( 'hi' )
.field2( 'hej' )
.build() as Entity

关于java - 为 Java 不可变对象(immutable对象)实现 Groovy 构建器的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283810/

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