文章9 | 阅读 3674 | 点赞0
你可以使用@Getter
或@Setter
注释任何字段,让lombok
自动生成默认的getter/setter
。
@Getter
和@Setter
简单使用如果字段名为foo
,则默认setter
名为setFoo
,返回void
,并且该字段采用与该字段相同类型的1个参数进行赋值,如this.foo = foo
。
默认的getter
只返回字段,如果字段名为foo
,则命名为getFoo
(如果字段的类型为boolean
,则命名为isFoo
),如下所示:
public class User {
@Getter @Setter
private String username;
@Getter @Setter
private Boolean isAdult;
@Getter @Setter
private boolean isYoungMan;
}
// 编译后:
public class User {
private String username;
private Boolean isAdult;
private boolean isYoungMan;
public User() { }
public String getUsername() { return this.username; }
public Boolean getIsAdult() { return this.isAdult; }
public boolean isYoungMan() { return this.isYoungMan; }
public void setUsername(String username) { this.username = username; }
public void setIsAdult(Boolean isAdult) { this.isAdult = isAdult; }
public void setYoungMan(boolean isYoungMan) { this.isYoungMan = isYoungMan; }
}
上面代码中,当我使用的是包装类型的Boolean
生成的getter
方法仍然是getIsAdult()
,只有将实体类的属性数据类型定义为基本数据类型boolean
时,lombok
才会帮助我们生成isXoo()
的格式,如isYoungMan()
。
你如果不想在每一个字段都添加@Getter
或@Setter
,那么你还可以在类上放置@Getter
或@Setter
注释。 在这种情况下,对该类中的所有非静态字段都添加getter & setter
方法,如下所示:
@Getter
@Setter
public class User {
private String username;
private Boolean isAdult;
private boolean isYoungMan;
}
采用在类上统一添加@Getter @Setter
注解的方式,可以同样达到如上编译后的结果。
AccessLevel
精确定义访问权限除非你明确指定AccessLevel
,否则生成的getter / setter
方法将是public
的。在Java中合法访问级别为PUBLIC
,PROTECTED
,PACKAGE
和PRIVATE
,AccessLevel
是有一个枚举类型,主要定义访问权限,如下所示:
public enum AccessLevel {
PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE,
/** Represents not generating anything or the complete lack of a method. */
NONE;
}
我们使用AccessLevel
来定义方法的访问权限,可以有两种方式:
@Getter @Setter
中添加value = AccessLevel.PRIVATE
,那么则会应用到类中的所有属性上;@Getter @Setter
中添加value = AccessLevel.PRIVATE
,那么会覆盖在类上添加的权限控制。@Getter
@Setter(value = AccessLevel.PRIVATE)
public class User {
@Setter(value = AccessLevel.PUBLIC) // 测试在属性上定义会覆盖在类上的定义
private String username;
@Getter(value = AccessLevel.PRIVATE)
private String password;
private boolean isAdult;
}
// 编译后
public class User {
private String username;
private String password;
private boolean isAdult;
public User() { }
public String getUsername() { return this.username; }
private String getPassword() { return this.password; }
public boolean isAdult() { return this.isAdult; }
public void setUsername(String username) { this.username = username; }
private void setPassword(String password) { this.password = password; }
private void setAdult(boolean isAdult) { this.isAdult = isAdult; }
}
在类AccessLevel
中你会看到AccessLevel.NONE
,你可以使用AccessLevel.NONE
来定义字段的访问级别,意思是采用手动方式禁止此字段的getter / setter
生成。 这个操作可以覆盖类上的@Getter
,@Setter
或@Data
注释的行为。
@Getter
@Setter(value = AccessLevel.PRIVATE)
public class User {
private String username;
@Getter(value = AccessLevel.NONE)
private String password;
private boolean isAdult;
}
// 编译后
public class User {
private String username;
private String password;
private boolean isAdult;
public User() { }
public String getUsername() { return this.username; }
public boolean isAdult() { return this.isAdult; }
private void setUsername(String username) { this.username = username; }
private void setPassword(String password) { this.password = password; }
private void setAdult(boolean isAdult) { this.isAdult = isAdult; }
}
要在生成的方法上添加注释,可以使用onMethod = @__{@AnnotationsHere};
要将注释放在生成的setter
方法的唯一参数上,可以使用onParam = @__{@AnnotationsHere})
。
注:使用lombok.config
定时lombok
需要lombok 1.14+
我们可以使用配置文件lombok.config
来定制Lombok
,通过配置我们可以使用更使用的Lombok
的功能,比如链式调用。
我们我可以将lombok.config
的配置文件放到任意位置,lombok.config
的作用范围是所在当前位置目录及子目录。
出于规范,建议放在根目录
或者src目录
下。
在lombok.config
中需要添加一项指明lombok
根目录位置的配置:
config.stopBubbling = true
当使用了这个配置,lombok
就会知道当前位置就是起作用的起始位置,其子目录都将会收到此配置文件的辐射作用。
如果在当前目录的子目录中还存在一个lombok.config
配置文件,那么对于子目录中的的实体类会优先选择使用子目录中的配置,而当前目录(父目录)下的相同的的配置项会被子目录下的配置覆盖掉。
在实际开发过程中,个人还是偏向使用链式调用,或者建造者模式,来构建对象,感觉就是爽!那么在lombok
中仍然是可以使用一个配置,来打成链式调用的效果:
lombok.accessors.chain = [true | false] (default: false)
config.stopBubbling=true
lombok.accessors.chain=true
lombok.config
配置文件位置
@Getter
@Setter
public class User {
private String username;
private String password;
private boolean isAdult;
}
// 编译后:
public class User {
private String username;
private String password;
private boolean isAdult;
public User() { }
public String getUsername() { return this.username; }
public String getPassword() { return this.password; }
public boolean isAdult() { return this.isAdult; }
public User setUsername(String username) {
this.username = username;
return this;
}
public User setPassword(String password) {
this.password = password;
return this;
}
public User setAdult(boolean isAdult) {
this.isAdult = isAdult;
return this;
}
}
// 测试链式调用:
public static void main(String[] args) {
User user = new User();
user.setUsername("jdkong").setPassword("jdkong").setAdult(true);
}
# 禁止生成以 set/get/is 为前缀的方法,以字段名为方法名。
lombok.accessors.fluent = [true | false] (default: false)
# 在生成的get/set/is 方法名中,添加前缀(或去掉字段中的某些前缀),eg:getPerfixFoo(),
lombok.accessors.prefix += a field prefix (default: empty list)
# 禁止生成 is 为前缀的方法
lombok.getter.noIsPrefix = [true | false] (default: false)
# 禁止使用 @Setter
lombok.setter.flagUsage = [warning | error] (default: not set)
# 禁止使用 @Getter
lombok.getter.flagUsage = [warning | error] (default: not set)
# 复制可以使用的注解:e.g. @Nullable/@NonNull annotations
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_41540822/article/details/86606245
内容来源于网络,如有侵权,请联系作者删除!