`
deepinmind
  • 浏览: 452190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41676
社区版块
存档分类
最新评论

Lombok: Java开发的利器

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


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

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

1. 不用再写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其它的一些很棒的特性。

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

2. 不用再重写equals和hashCode方法
     @EqualsAndHashCode注解可以自动生成这些方法

3. 通过类注解来生成构造方法
     @NoArgsConstructor生成一个默认的构造方法
     @RequiredArgsConstructor为所有final和非空(译注:带有@NonNull注解)字段生成一个构造方法
     @AllArgsConstructor会为所有字段生成一个构造方法
4. @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或者别的脚本语言,都比这简单多了。简单即是美,因此Lombok和Java很般配。

原创文章转载请注明出处:http://it.deepinmind.com

英文原文链接
9
6
分享到:
评论
23 楼 非法用户 2014-09-12  
我们编译打包用的maven啊,需要maven插件支持吗?
22 楼 endual 2014-04-10  
谈不上利器吧,现有IDE可以辅助解决很多JAVA劣势。
21 楼 w286332849 2014-04-10  
Night舞夜 写道
使用注解 @Getter @Setter 能调用实例对象的getter setter方法嘛?(显示的调用,而不是通过反射)

这货主要是黑了Eclipse的编译器,你加了注解之后,Eclipse编译出来的class里面已经存在了get/set方法. 所以你就可以直接调用了.
20 楼 w286332849 2014-04-10  
代码生成器 你值得拥有.
19 楼 Night舞夜 2014-04-10  
使用注解 @Getter @Setter 能调用实例对象的getter setter方法嘛?(显示的调用,而不是通过反射)
18 楼 quanzhanweiyi-cc 2014-04-09  
这种只适合纯粹set get,如果方法里家简单逻辑就不行了
17 楼 gundumw100 2014-04-09  
1:工具生成的setter/getter/toString/hashCode都太死
2:又要多记一些关键字了
综上:纯粹鸡肋!
16 楼 deepinmind 2014-04-09  
freezingsky 写道
我只能说,如果从代码的清洁程度上去考虑的话,使用注解确实可以让类看起来更简洁干净些。但同时也引入了新的学习曲线,而这个学习曲线还没有达到有用户觉得这是一种可以接受的范围。

所以,我想绝大数人都会选择让IDE去做这个事吧。


是的,其实它就是提供了另一种选择而已,你说的或许也是这个工具不怎么流行的原因。我在项目中也不用它,事实上我觉得它应该更适合个人开发。要团队中所有人统一接受它还是有一定成本的。
15 楼 freezingsky 2014-04-09  
我只能说,如果从代码的清洁程度上去考虑的话,使用注解确实可以让类看起来更简洁干净些。但同时也引入了新的学习曲线,而这个学习曲线还没有达到有用户觉得这是一种可以接受的范围。

所以,我想绝大数人都会选择让IDE去做这个事吧。
14 楼 remoteJavaSky 2014-04-08  
我看到这就想到了四个字  大浪淘沙
13 楼 sayji 2014-04-08  
按几个快捷键都完成了。除非像C# 3.0 加入的的自动属性那样,不用写字段还差不多。
12 楼 love297 2014-04-08  
"人们不喜欢Java...."说的我像是火星人似得。
11 楼 rex0654335 2014-04-08  
此功能无实际意义
10 楼 deepinmind 2014-04-08  
wuyunlong 写道
Lombok我看见就想干掉。它在ide差异化的团队遭受诟病,本来就是使用idea能够解决快速解决的问题,非要多此一举。


这确实是见仁见智的问题,我们项目中其实也没用。
9 楼 lcwen08 2014-04-08  
其实有点多此一举了,ide已经能够很好的完成了
8 楼 wuyunlong 2014-04-08  
Lombok我看见就想干掉。它在ide差异化的团队遭受诟病,本来就是使用idea能够解决快速解决的问题,非要多此一举。
7 楼 deepinmind 2014-04-08  
guomingzhang2008 写道
支持eclipse,但是对idea的支持不是很好,至少在半年前我还没有在idea上使用成功!


IDEA的插件前几天刚更新了,你可以试下,我这边是可以了
6 楼 guomingzhang2008 2014-04-08  
支持eclipse,但是对idea的支持不是很好,至少在半年前我还没有在idea上使用成功!
5 楼 deepinmind 2014-04-08  
1927105 写道
这是codesmith干的活啊,用注解是不是有点重量级了,何况效率如何?


效率是没有问题的,它是在输出成class文件的时候进行生成的,不是运行时的增强。
4 楼 deepinmind 2014-04-08  
yixiandave 写道
限制有点死。toString()和hashCode()不一定是按照这种逻辑来,equals也可能只比较某一个字段或者是自己实现的算法。
甚至是Getter和Setter也可能包含了转换操作。
至于构造器,一个类的构造器可能远远不止一个,这包含了一些默认参数的设定之类的。我认为groovy输入一个map实现构造的方式更为灵活


确实是,这也就适合最普通的一些情况,用来替代IDE生成代码的那种场景的。

相关推荐

    lombok.jar代码生成器

    **正文** ...总之,`lombok.jar` 是Java开发中的利器,它通过注解的方式,极大地减少了代码量,提升了代码的可读性和一致性。对于追求简洁高效的Java开发者来说,学习和使用Lombok是十分有价值的。

    java程序员开发必备的利器

    4. **JDK (Java Development Kit)**: Java开发的基础,包含了Java编译器javac、JVM(Java虚拟机)以及各种Java工具,如javadoc用于生成API文档,junit用于编写和运行单元测试。 5. **Maven/Gradle**: 项目构建工具...

    lombok-0.30-EAP.zip

    总的来说,Lombok通过减少样板代码,提高了代码的可读性和开发效率,是现代Java开发中的一个利器。而"Lombok-0.30-EAP.zip"这个压缩包则是为特定IDEA版本提供的插件,方便开发者快速安装和使用。

    lombok表达式jar下载

    总之,Lombok是提升Java开发效率的利器,通过消除样板代码,让开发者更专注于业务逻辑。然而,使用Lombok也需要适度,避免过度依赖,保持代码的可读性和可维护性。在理解和评估利弊后,适当地引入Lombok到项目中,...

    lombok.jar下载.rar

    总结来说,Lombok是Java开发中提高效率的利器,它通过注解驱动的代码生成技术,帮助开发者减少大量样板代码,使代码更加简洁、易读。下载并使用"lombok.jar",将使你的Java开发体验更上一层楼。

    idea插件lombok

    **正文** Lombok是一个流行的Java库,它通过提供一系列注解来简化代码,尤其是在getter、setter、构造函数、equals、hashCode以及toString方法等常见...结合IDEA的强大功能,Lombok插件无疑是一个值得推荐的开发利器。

    lombok插件.zip

    总之,Lombok是Java开发中的一大利器,它可以减少重复代码,提高开发效率,但同时也需要开发者对其原理有深入了解,以便在项目中合理运用。通过离线安装的方式,开发者可以在没有网络的环境下也能轻松地在Eclipse中...

    lombok-plugin-0.25-2017.3.zip

    Lombok是一款非常流行的Java开发工具,它通过提供一系列的注解来简化代码,尤其是消除样板式的getter、setter、构造函数等。Lombok插件对于IDEA(IntelliJ IDEA)用户来说尤其有用,因为它可以与IDE集成,实现自动化...

    lombok.jar 下载

    总结,Lombok是Java开发中的利器,通过注解简化了对象的创建和维护,提升了代码质量,降低了出错概率,同时也让代码更易读、更易于维护。然而,理解并合理使用Lombok是关键,避免过度依赖或滥用,以保持代码的清晰和...

    lombok-plugin.zip

    在Java开发中,我们常常会遇到为类的属性生成getter和setter的情况,尤其在创建数据模型或者POJO类时,这些重复的代码会占据大量的时间。Lombok通过在类定义上使用特定的注解,可以在编译时自动生成这些方法,避免...

    lombok-plugin-0.27-2019.1.zip

    总之,Lombok插件是提高Java开发效率的利器,它与IntelliJ IDEA 2019.1版本的结合,使得开发过程更加简洁高效。理解并熟练使用Lombok的各种注解,能够帮助开发者节省大量时间,专注于更核心的业务需求。

    idea lombok 最新插件

    总的来说,Idea Lombok插件是提高Java开发效率的利器,通过本地和离线安装方式,开发者可以方便地在任何环境下享受到它带来的便利。保持插件和Lombok库的最新状态,有助于充分利用其功能并保持与最新的开发实践同步...

    lombok插件

    总的来说,Lombok插件是Java开发中的一大利器,它通过减少样板代码,让开发者能更专注于业务逻辑,提高了代码的可读性和维护性。如果你经常编写包含大量getter、setter的类,那么Lombok绝对值得尝试。

    lombok-plugin-0.34.1-2019.1

    总之,Lombok是Java开发中的利器,通过注解方式自动化处理常见代码,使得开发者可以更专注于业务逻辑,提高开发效率,同时也保持了代码的整洁性。在进行Java源码软件开发时,尤其是使用Java作为主要开发语言的情况下...

    lombok-intellij-plugin.zip

    总之,Lombok 和其对应的 IntelliJ IDEA 插件是 Java 开发中的利器,它们能够帮助开发者减少代码量,提高代码的可读性和维护性。只要正确安装并配置 Lombok 插件,就能避免因缺少支持而产生的编译错误和启动问题,让...

    IDEA lombok 插件工具

    总结起来,IDEA 的 Lombok 插件是 Java 开发者提升效率的利器,通过简化代码和提供实时的代码提示,让开发者能更专注于业务逻辑,而不是重复的样板代码。正确安装和配置 Lombok 插件,并结合 Lombok 注解的使用,...

    lombok-plugin-0.29-2019.1.zip

    总之,Lombok是提高Java开发效率的利器,其插件使得IDE与Lombok更好地集成,使得开发者能专注于业务逻辑,而非重复的样板代码。"lombok-plugin-0.29-2019.1.zip"的使用者可以通过安装这个插件,享受到Lombok带来的...

    最新 lombok 1.18.4.jar

    Lombok 是一个 Java 开发工具库,它通过提供注解的方式简化了 Java 代码的编写,尤其是减少了样板代码。Lombok 1.18.4 是这个库的一个更新版本,致力于提升开发效率和代码的可读性。在这个版本中,开发者可以期待一...

    Android Studio的Lombok插件

    在Java开发中,Lombok库是一个极其有用的工具,它通过注解的方式,帮助开发者自动处理类中的getter、setter、构造器等样板代码,极大地提高了代码的简洁性和可读性。而在Android开发环境中,Android Studio作为主流...

Global site tag (gtag.js) - Google Analytics