码迷,mamicode.com
首页 > 编程语言 > 详细

分享Java开发的利器-Lombok

时间:2016-08-02 11:47:39      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:private   return   public   java   equals   

译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火。很多Lombok特性可以参考它的官网介绍哈兄弟连在这里只是简单介绍一下它的基础功能。

 

Lombok是一个旨在减少代码开发工作的Java库。本文介绍了如何用它来完成getter/setter方法,构造方法,以及重写equals()hashCode()toString()方法。在Java中,一个很简单的类却往往写得特别复杂。如果你没听说过Lombok的话,那它肯定会让你满意的。

 

Lombok可以帮助Java开发人员完成以下这些事情:

 

不用再写setter/getter方法了

不用Lombok的话,我们通常都得这么写:

 

public class Animal {

 

    private String name;

    private String gender;

    private String species;

 

    public String getName(){

        return this.name;

    }

 

    public void setName(String name){

        this.name = name;

    }

 

    public String getGender(){

        return this.gender;

    }

 

    public void setGender(String gender){

        this.gender = gender;

    }

 

    public String getSpecies(){

        return this.species;

    }

 

    public void setSpecies(String species){

        this.species = species;

    }

}

这些方法写多了之后,我慢慢开始有点讨厌Java了。

 

有了Lombok之后:

 

public class Animal {

 

    @Getter @Setter private String name;

    @Getter @Setter private String gender;

    @Getter @Setter private String species;

}

日子开始变得滋润多了。 下面还有Lombok其它的一些很棒的特性。

 

不用再重写toString方法。 可以给类加上@ToString注解,Lombok会自动重写toString方法并打印出类的所有字段。

 

不用再重写equalshashCode方法 @EqualsAndHashCode注解可以自动生成这些方法

 

通过类注解来生成构造方法 @NoArgsConstructor生成一个默认的构造方法 @RequiredArgsConstructor为所有final和非空(译注:带有@NonNull注解)字段生成一个构造方法 @AllArgsConstructor会为所有字段生成一个构造方法

 

@Data@ToString, @EqualsAndHashCode, @RequiredArgsConstructor, @Getter / @Setter这些注解的一个快捷方式。

 

这些是最常用到的Lombok特性。其它的一些功能可以到它的项目主页上进行了解。

 

示例

假设我们有一个类是需要支持序列化的,并且需要一个构造方法。这需要重写equals,hashCode,toString,同时为私有成员变量提供setter/getter方法,并实现一个构造方法。

 

使用了Lombok

 

@RequiredArgsConstructor

@ToString

@EqualsAndHashCode

public class Animal {

    @Getter @Setter private String name;

    @Getter @Setter private String gender;

    @Getter @Setter private String species;

}

没有使用Lombok

 

public class Animal {

 

    private String name;

    private String gender;

    private String species;

 

    public Animal(String name, String gender, String species) {

        this.name = name;

        this.gender = gender;

        this.species = species;

    }

 

    public String getName(){

        return this.name;

    }

 

    public void setName(String name){

        this.name = name;

    }

 

    public String getGender(){

        return this.gender;

    }

 

    public void setGender(String gender){

        this.gender = gender;

    }

 

    public String getSpecies(){

        return this.species;

    }

 

    public void setSpecies(String species){

        this.species = species;

    }

 

    @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (!(o instanceof Animal)) return false;

 

        Animal animal = (Animal) o;

 

        if (gender != null ? !gender.equals(animal.gender) : animal.gender != null) return false;

        if (name != null ? !name.equals(animal.name) : animal.name != null) return false;

        if (species != null ? !species.equals(animal.species) : animal.species != null) return false;

 

        return true;

    }

 

    @Override

    public int hashCode() {

        int result = name != null ? name.hashCode() : 0;

        result = 31 * result + (gender != null ? gender.hashCode() : 0);

        result = 31 * result + (species != null ? species.hashCode() : 0);

        return result;

    }

 

    @Override

    public String toString() {

        return Objects.toStringHelper(this) //Using guava library objects toString

                .add("name", name)

                .add("gender", gender)

                .add("species", species)

                .toString();

    }

}

很多Java开发人员会争辩道,"有加注解的那个工夫,IDE早就把这些代码给生成了!"

 

我想说的是你没有说到点子上。人们不喜欢Java是因为它的代码里必须要有这些乱七八糟的东西。像Ruby, Groovy, Perl或者别的脚本语言,都比这简单多了。简单即是美,兄弟连小编觉得LombokJava很般配


分享Java开发的利器-Lombok

标签:private   return   public   java   equals   

原文地址:http://11923030.blog.51cto.com/11913030/1833353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!