eclipse 按装lombok与注解说明
原文:http://www.cnblogs.com/ywqbj/p/5711691.html
一、安装lombok
1、下载 lombok-1.16.16.jar 包
我的下载完后放到:/root/lombok-1.16.16.jar 里面
2、执行
cd /root/
java -jar lombok-1.16.16.jar
弹出界面如下:
选择“Specify location”,在弹出的子界面选择到eclipse的根目录:
点击“selecte” 完成安装。成功安装后,会在eclipse.ini所在目录多出来一个lombok.jar包。
打开eclipse.ini文件,最下面会多出来
-javaagent:/opt/java/eclipse/lombok.jar
二、lombok的注解说明
注解说明
val
:用在局部变量前面,相当于将变量声明为final@NonNull
:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)@Cleanup
:自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流@Getter/@Setter
:用在属性上,再也不用自己手写setter和getter方法了,还可以指定访问范围@ToString
:用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性@EqualsAndHashCode
:用在类上,自动生成equals方法和hashCode方法@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull属性作为参数的构造函数,如果指定staticName = “of”参数,同时还会生成一个返回类对象的静态工厂方法,比使用构造函数方便很多@Data
:注解在类上,相当于同时使用了@ToString
、@EqualsAndHashCode
、@Getter
、@Setter
和@RequiredArgsConstrutor
这些注解,对于POJO类
十分有用@Value
:用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法@Builder
:用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
更多说明参考Builder@SneakyThrows
:自动抛受检异常,而无需显式在方法上使用throws语句@Synchronized
:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock
或$LOCK
,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误@Getter(lazy=true)
:可以替代经典的Double Check Lock样板代码@Log
:根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类@CommonsLog
Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);@Log
Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());@Log4j
Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);@Log4j2
Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);@Slf4j
Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);@XSlf4j
Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
三、代码示例
- val
val示例
2345678910public
static
void
main(String[] args) {
val sets =
new
HashSet<String>();
val lists =
new
ArrayList<String>();
val maps =
new
HashMap<String, String>();
//=>相当于如下
final
Set<String> sets2 =
new
HashSet<>();
final
List<String> lists2 =
new
ArrayList<>();
final
Map<String, String> maps2 =
new
HashMap<>();
}
@NonNull示例
2
3
4
|
public void notNullExample( @NonNull String string) { string.length(); } |
2
3
4
5
6
7
8
9
|
//=>相当于 public void notNullExample(String string) { if (string != null ) { string.length(); } else { throw new NullPointerException( "null" ); } } |
@Cleanup示例
234567891011121314151617181920212223public
static
void
main(String[] args) {
try
{
@Cleanup
InputStream inputStream =
new
FileInputStream(args[
0
]);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
//=>相当于
InputStream inputStream =
null
;
try
{
inputStream =
new
FileInputStream(args[
0
]);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
finally
{
if
(inputStream !=
null
) {
try
{
inputStream.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
}
@Getter/@Setter示例
2345@Setter
(AccessLevel.PUBLIC)
@Getter
(AccessLevel.PROTECTED)
private
int
id;
private
String shap;
@ToString示例
23456789101112@ToString
(exclude =
"id"
, callSuper =
true
, includeFieldNames =
true
)
public
class
LombokDemo {
private
int
id;
private
String name;
private
int
age;
public
static
void
main(String[] args) {
//输出LombokDemo(super=LombokDemo@48524010, name=null, age=0)
System.out.println(
new
LombokDemo());
}
}
@EqualsAndHashCode示例
23456@EqualsAndHashCode
(exclude = {
"id"
,
"shape"
}, callSuper =
false
)
public
class
LombokDemo {
private
int
id;
private
String shap;
}
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor示例
234567891011121314151617181920@NoArgsConstructor
@RequiredArgsConstructor
(staticName =
"of"
)
@AllArgsConstructor
public
class
LombokDemo {
@NonNull
private
int
id;
@NonNull
private
String shap;
private
int
age;
public
static
void
main(String[] args) {
new
LombokDemo(
1
,
"circle"
);
//使用静态工厂方法
LombokDemo.of(
2
,
"circle"
);
//无参构造
new
LombokDemo();
//包含所有参数
new
LombokDemo(
1
,
"circle"
,
2
);
}
}
@Data示例
23456789101112131415161718import
lombok.Data;
@Data
public
class
Menu {
private
String shopId;
private
String skuMenuId;
private
String skuName;
private
String normalizeSkuName;
private
String dishMenuId;
private
String dishName;
private
String dishNum;
//默认阈值
private
float
thresHold =
0
;
//新阈值
private
float
newThresHold =
0
;
//总得分
private
float
totalScore =
0
;
}
@Value示例
23456789101112131415@Value
public
class
LombokDemo {
@NonNull
private
int
id;
@NonNull
private
String shap;
private
int
age;
//相当于
private
final
int
id;
public
int
getId() {
return
this
.id;
}
...
}
@Builder示例
234567891011@Builder
public
class
BuilderExample {
private
String name;
private
int
age;
@Singular
private
Set<String> occupations;
public
static
void
main(String[] args) {
BuilderExample test = BuilderExample.builder().age(
11
).name(
"test"
).build();
}
}
@SneakyThrows示例
234567891011121314151617181920212223import
lombok.SneakyThrows;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.InputStream;
import
java.io.UnsupportedEncodingException;
public
class
Test {
@SneakyThrows
()
public
void
read() {
InputStream inputStream =
new
FileInputStream(
""
);
}
@SneakyThrows
public
void
write() {
throw
new
UnsupportedEncodingException();
}
//相当于
public
void
read()
throws
FileNotFoundException {
InputStream inputStream =
new
FileInputStream(
""
);
}
public
void
write()
throws
UnsupportedEncodingException {
throw
new
UnsupportedEncodingException();
}
}
@Synchronized示例
234567891011121314public
class
SynchronizedDemo {
@Synchronized
public
static
void
hello() {
System.out.println(
"world"
);
}
//相当于
private
static
final
Object $LOCK =
new
Object[
0
];
public
static
void
hello() {
synchronized
($LOCK) {
System.out.println(
"world"
);
}
}
}
@Getter(lazy = true)
2
3
4
5
6
7
8
9
10
11
12
|
public class GetterLazyExample { @Getter (lazy = true ) private final double [] cached = expensive(); private double [] expensive() { double [] result = new double [ 1000000 ]; for ( int i = 0 ; i < result.length; i++) { result[i] = Math.asin(i); } return result; } } |
2
|
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.util.concurrent.atomic.AtomicReference; public class GetterLazyExample { private final AtomicReference<java.lang.Object> cached = new AtomicReference<>(); public double [] getCached() { java.lang.Object value = this .cached.get(); if (value == null ) { synchronized ( this .cached) { value = this .cached.get(); if (value == null ) { final double [] actualValue = expensive(); value = actualValue == null ? this .cached : actualValue; this .cached.set(value); } } } return ( double []) (value == this .cached ? null : value); } private double [] expensive() { double [] result = new double [ 1000000 ]; for ( int i = 0 ; i < result.length; i++) { result[i] = Math.asin(i); } return result; } } |
eclipse 按装lombok与注解说明的更多相关文章
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...
- 利用Eclipse的JPA自动生成注解实体
新公司用的SSH(springmvc)框架,看代码的时候,发现没有hbm.xml文件,全部使用的注解形式.在一次闲聊的时候问同事,这么多entity 写起来不麻烦么.同事说根据数据库自动生成的.于是 ...
- 来自lombok的注解(解决idea中的找不到get,set方法,找不到log的问题)
今天看代码,发现idea报错,仔细一看调用的get,set方法bean中都没有,但是运行起来却没有问题,这个让我很疑惑.后来发现在类上有一个以前没见过的注解@Data,大概就是因为有他的原因.这个注解 ...
- lombok常用注解@Data@AllArgsConstructor@NoArgsConstructor@Builder@Accessors
原贴:https://blog.csdn.net/ChenXvYuan_001/article/details/84961992 https://blog.csdn.net/weixin_382293 ...
- Lombok - 使用注解让你的JavaBean变得更加简洁
Lombok - 工具简介: Lombok是一个编译时注释预处理器,有助于在编译时注入一些代码.Lombok提供了一组在开发时处理的注释,以将代码注入到Java应用程序中,注入的代码在开发环境中立即可 ...
- 20190905 Lombok常用注解
Lombok常用注解 val 用于声明类型,将从初始化表达式推断出类型,仅适用于局部变量和foreach循环,而不适用于字段.声明的局部变量为final变量. Java自带类型推断随着JDK版本提升越 ...
- eclipse中使用lombok不生效
eclipse中使用lombok,在实体类中添加@Data后,还是不能调用get.set方法.需要修改eclipse配置 1.将 lombok.jar 复制到eclipse.ini同级目录.下载的lo ...
- Eclipse - 安装lombok后注解无效
安装 lombok lombok 的安装过程挺简单的,网上已经有很多相关的博客,这里就不在多说了,可以参考这篇:eclipse集成lombok注解不起作用 但是我按照网上的方式安装之后,注解一直不起作 ...
- 项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
@Data注解来源与Lombok,可以减少代码中大量的set get方法,大量减少冗余代码,但是今天部署项目时候,发现实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错. ...
随机推荐
- kafka 常用命令
Kafka 解压,进入kafka目录下的bin目录 启动zk nohup ./zookeeper-server-start.sh ../config/zookeeper.properties & ...
- 很漂亮的按钮css样式(没有用到图片,可直接拷贝代码使用)
[转自]http://blog.csdn.net/lushuaiyin/article/details/8118669 对于程序员,有时候也需要对页面风格做些改动,整体的页面风格还是美工的工作. 按钮 ...
- kubernetes 学习 pod相关
1 pod的状态: Pending, Running, Succeeded, Failed, Unknown 2 pod重启策略: Always(自动重启,是默认的) . OnFailure(容 ...
- java继承 初始化顺序
java继承 初始化顺序 标签: 初始化顺序 2013-08-01 10:13 879人阅读 评论(0) 收藏 举报 分类: java(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- SharePoint 事件 2137 / 2138 :SharePoint 运行状况分析器检测到错误。驱动器的可用空间不足。
转自MSDN:http://technet.microsoft.com/zh-cn/library/ff805057.aspx 摘要:服务器场中的一个或多个服务器上的磁盘驱动器的可用空间不足. 注意: ...
- ODPS基础
遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba ...
- Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别
我们常常听说操作系统的MSDN版.OEM版.RTM版.VOL版等等,它们到底是什么意思,有什么不同呢? (一)MSDN (Microsoft Developer Network)版MSDN软件是微软公 ...
- array,vector对象 数组越界检测
- Python入门——import
最近身边的人或多或少都知道一点python,自己也想动手试试吧.按照网上的教程,安装了python,Eclipse插件pydev.接下来就是在Eclipse下新建工程,创建py文件这就不多说了. 第一 ...
- 5、数据类型三:hash
Hash数据类型使用很普遍,它同样是key-value的方式来组织的,只是其value又包含多个field-fieldValue对.想要获取某个fieldValue,可以通过key-field联合来定 ...