1. 简介
Project Lombok是一个流行的库,用于减少 Java 样板。
在这个快速教程中,我们将看看 Lombok@Getter注释如何在布尔字段上工作,以消除创建其相应 getter 方法的需要。
2. Maven 依赖
让我们首先将龙目岛项目添加到我们的pom.xml:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
Copy
3. 在boolean
字段上使用@Getter
假设我们希望 Lombok 为我们的私有布尔字段生成一个访问器方法。
我们可以通过以下方式注释该字段@Getter:
@Getter
private boolean running;
Copy
Lombok 将使用其注释处理器在类中生成isRunning() 方法。
现在,我们可以参考它,即使我们自己没有编写方法:
@Test
public void whenBasicBooleanField_thenMethodNamePrefixedWithIsFollowedByFieldName() {
LombokExamples lombokExamples = new LombokExamples();
assertFalse(lombokExamples.isRunning());
}
Copy
3.1. 与其访问器同名的boolean
字段
让我们添加另一行代码,使示例有点棘手:
@Getter
private boolean isRunning = true;
Copy
如果 Lombok 创建了一个名为isIsRunning 的方法,那就有点麻烦了。
相反,龙目岛像以前一样创建isRunning:
@Test
public void whenBooleanFieldPrefixedWithIs_thenMethodNameIsSameAsFieldName() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.isRunning());
}
Copy
3.2. 两个具有相同访问器名称的boolean
字段
有时,可能会有冲突。
假设我们需要在同一类中有以下行:
@Getter
public boolean running = true;
@Getter
public boolean isRunning = false;
Copy
我们应该避免像这样令人困惑的命名约定的原因有很多。其中之一是它为龙目岛制造了冲突。
使用龙目岛的约定,这两个字段将具有相同的访问器方法名称:isRunning。但是,在同一类中具有两个同名的方法将创建编译器错误。
Lombok 通过仅创建一个访问器方法并在本例中根据字段声明顺序将其指向正在运行来解决此问题:
@Test
public void whenTwoBooleanFieldsCauseNamingConflict_thenLombokMapsToFirstDeclaredField() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.isRunning() == lombokExamples.running);
assertFalse(lombokExamples.isRunning() == lombokExamples.isRunning);
}
Copy
4. 在Boolean
字段上使用@Getter
现在,龙目岛对待Boolean
类型的方式略有不同。
让我们最后一次尝试相同的运行示例,但使用Boolean
而不是基元类型:
@Getter
private Boolean running;
Copy
Lombok 不会创建isRunning,而是生成getRunning:
@Test
public void whenFieldOfBooleanType_thenLombokPrefixesMethodWithGetInsteadOfIs() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.getRunning());
}
Copy
5. 结论
在本文中,我们探讨了如何将龙目岛的@Getter注释用于布尔基元和布尔对象。
并确保在Github上查看示例。