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()方法报错. ...
随机推荐
- NGUI中LabelA停靠LabelB的方法
详情看 http://note.youdao.com/noteshare?id=ec901d56341207052b2d19233b5ddba3 这里仅仅贴出文字,完整内容请看上面链接. 有这样一个需 ...
- java,js 解unicode
import java.util.regex.Matcher; import java.util.regex.Pattern; public class UnicodeDecodeDataConver ...
- 安装Elastix-2.4版本
首先,下载Elastix地址:http://www.elastix.org,下载里面的2.4版本 第一步:选择安装,Enter 选择语言,默认就行 选择us,默认 选择全部 选择默认分区,点击OK 配 ...
- 04_java之基本语法02
01switch语句解构 * A:switch语句解构 a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. b:格式如下: swtich(表达式){ case 常量1 : 要 ...
- DotNetBar For Windows Forms 12.5.0.2 官方原版及注册
转自原文DotNetBar For Windows Forms 12.5.0.2 官方原版及注册 DotNetBar是一款带有56个 Windows Form 控件的工具箱,使开发人员可以轻而易举地创 ...
- [转] C#-using用法详解
转载自 WanderOCN的文章 C#-using用法详解 using 关键字有两个主要用途: (一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型. (二).作为语句,用于定义一个 ...
- ELK 日志管理系统,再次尝试记录
简介: 第二次尝试 ELK 记录... 工作流程: 1.客户端的 Logstash 将日志信息采集到之后传输给 Redis 做消息队列 2.然后服务端的 Logstash 将日志从 Redis 中取出 ...
- nextcloud 安装
nextcloud 优化 设置php.ini vim /etc/php/7.0/apache2/php.ini 添加以下代码: opcache.enable= opcache.enable_cli= ...
- vs code 配置spring boot开发环境
一.环境变量 jdk环境变量一键设置 管理員运行 - 一支小白 - 博客园https://www.cnblogs.com/startnow/p/7416533.html 二.安装插件 1.Java E ...
- IDEA快捷键【收藏】
Ctrl+Alt+L 格式化代码Ctrl+Shift+J 两行合成一行,删去不必要的空格匹配代码格式其他快捷键:[常规]Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 ...