我想有一种简单的方法来构建测试数据,并发现生成器模式非常适合这里描述的情况。然而,为了减少组件测试中的样板代码,甚至更多,我发现来自龙目岛项目的@Builder是一个很好的候选人。然而,我找不到任何关于如何在方法上使用它的留档或在线示例。我想在某种工厂方法上使用@Builder
,因为我不能对实现进行任何更改。
有人能举例说明如何在方法上实际使用@Builder
?
使用方法上的@Builder
来创建狗
和猫
实例。
在本例中,@Value
使用访问器方法(getter)创建一个最终的不可变值对象,一个全参数构造函数,equals()
,hashCode()
和toString()
。
import static org.junit.Assert.*;
import lombok.Builder;
import lombok.Value;
import org.junit.Test;
@SuppressWarnings("javadoc")
public class ImmutableAnimals {
@Builder(builderMethodName = "dogBuilder")
public static Dog newDog(String color, String barkSound) {
return new Dog(color, barkSound);
}
@Builder(builderMethodName = "catBuilder")
public static Cat newCat(String color, String meowSound) {
return new Cat(color, meowSound);
}
public static interface Animal {
String getColor();
}
@Value
public static class Cat implements Animal {
String color;
String meowSound;
}
@Value
public static class Dog implements Animal {
String color;
String barkSound;
}
@Test
public void testDog() {
final String expectedBarkSound = "woof";
final String expectedColor = "brown";
final Dog dog = ImmutableAnimals.dogBuilder()
.barkSound(expectedBarkSound)
.color(expectedColor)
.build();
assertEquals(expectedBarkSound, dog.getBarkSound());
assertEquals(expectedColor, dog.getColor());
}
@Test
public void testCat() {
final String expectedMeowSound = "purr";
final String expectedColor = "white";
final Cat cat = ImmutableAnimals.catBuilder()
.meowSound(expectedMeowSound)
.color(expectedColor)
.build();
assertEquals(expectedMeowSound, cat.getMeowSound());
assertEquals(expectedColor, cat.getColor());
}
}
下面是另一个具有相同域类但使用可变值的示例。然而,只要有可能,总是喜欢不可变性。
import static org.junit.Assert.*;
import lombok.Builder;
import lombok.Data;
import org.junit.Test;
@SuppressWarnings("javadoc")
public class MutableAnimals {
@Builder(builderMethodName = "dogBuilder")
public static Dog newDog(String color, String barkSound) {
final Dog dog = new Dog();
dog.setBarkSound(barkSound);
dog.setColor(color);
return dog;
}
@Builder(builderMethodName = "catBuilder")
public static Cat newCat(String color, String meowSound) {
final Cat cat = new Cat();
cat.setMeowSound(meowSound);
cat.setColor(color);
return cat;
}
public static interface Animal {
String getColor();
}
@Data
public static class Cat implements Animal {
String color;
String meowSound;
}
@Data
public static class Dog implements Animal {
String color;
String barkSound;
}
@Test
public void testDog() {
final String expectedBarkSound = "woof";
final String expectedColor = "brown";
final Dog dog = MutableAnimals.dogBuilder()
.barkSound(expectedBarkSound)
.color(expectedColor)
.build();
assertEquals(expectedBarkSound, dog.getBarkSound());
assertEquals(expectedColor, dog.getColor());
}
@Test
public void testCat() {
final String expectedMeowSound = "purr";
final String expectedColor = "white";
final Cat cat = MutableAnimals.catBuilder()
.meowSound(expectedMeowSound)
.color(expectedColor)
.build();
assertEquals(expectedMeowSound, cat.getMeowSound());
assertEquals(expectedColor, cat.getColor());
}
}
这就是你如何使用@Builder。
//Employee.Java
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Employee {
private final String empName;
private final int salary;
}
// Main.java
public class Main {
public static void main(String[] args) {
Employee emp = Employee.builder().empName("Deendaya").salary(100).build();
System.out.println(emp);
}
}
我正在使用lombok@Builder。当我将注释放在类上时,生成公共方法。但是我想创建私有的方法。不幸的是,注释没有选项。我该怎么办?
当我试图用一个私有的默认构造函数映射对象时,MapStruct无法创建一个实现,而是使用一个(lombok生成的)构建器。 为了重现这个问题,复制这个repo https://github.com/rmvanderspek/mapstruct-demo和mvn verify。
但是现在我想为任何未显式设置的字段提供默认值。因此,如果我这样做了,那么将创建一个具有所有默认值的对象:
将这些注释应用于mixin没有任何效果。 我发现唯一有效的方法是利用创建的包访问AllArgsConstructor,并用以下构造函数填充mixin 这显然是不可取的,因为它需要显式地迭代和硬编码每个类属性,使得mixin对外部POJO中的任何更改都很脆弱。
我有以下课程: 为什么我无法在抽象类(< code>Parent)的实例上调用< code>toBuilder(),如下面的代码所示?
问题内容: 有人可以给MWE 直接在方法上使用注释的方法吗? 我已经看到了无数的关于在类定义中使用它的示例-但还没有方法的示例。 引用文档: 这种添加到一个类定义或 一个方法 @Target(value = {TYPE, METHOD }) 因此,我认为还有一种可能性和预期的用途-但不幸的是,我无法弄清楚。 问题答案: 这里的DataSource类具有属性url,用户名,密码,driverClas