lombok —— 消除冗长的 java 代码

开源软件与框架技术 workingTime 1737℃ 0评论

官方网站:https://projectlombok.org
下载地址:https://projectlombok.org/download.html

看一下官网视频,真的就会爱上这个东东了。非常强大

val

简化被final修饰的变量写法
使用前:

public class ValExample {
   public String example() {
     final ArrayList<String> example = new ArrayList<String>();
     example.add("Hello, World!");
     final String foo = example.get(0);
     return foo.toLowerCase();
   }
   
   public void example2() {
     final HashMap<Integer, String> map = new HashMap<Integer, String>();
     map.put(0, "zero");
     map.put(5, "five");
     for (final Map.Entry<Integer, String> entry : map.entrySet()) {
       System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
     }
   }
}

使用后

public class ValExample {
    public String example() {
        val example = new ArrayList<String>();
        example.add("Hello, World!");
        val foo = example.get(0);
        return foo.toLowerCase();
    }
    
    public void example2() {
        val map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");
        for (val entry : map.entrySet()) {
            System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
        }
    }
}

@NonNull

帮助我们解决空指针的困扰
使用前

public class NonNullExample extends Something {
    private String name;
    
    public NonNullExample(@NonNull Person person) {
        super("Hello");
        if (person == null) {
            throw new NullPointerException("person");
        }
        this.name = person.getName();
    }
}

使用后

public class NonNullExample extends Something {
    private String name;
    
    public NonNullExample(@NonNull Person person) {
        super("Hello");
        this.name = person.getName();
    }
}

@Cleanup

自动资源管理,自动来关闭输入输出流什马的!(不过现在java8自带这种功能了)
使用前

public class CleanupExample {
    public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream(args[0]);
        try {
            OutputStream out = new FileOutputStream(args[1]);
            try {
                byte[] b = new byte[10000];
                while (true) {
                    int r = in.read(b);
                    if (r == -1) break;
                    out.write(b, 0, r);
                }
            } finally {
                if (out != null) {
                    out.close();
                }
            }
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }
}

使用后

public class CleanupExample {
    public static void main(String[] args) throws IOException {
        @Cleanup InputStream in = new FileInputStream(args[0]);
        @Cleanup OutputStream out = new FileOutputStream(args[1]);
        byte[] b = new byte[10000];
        while (true) {
            int r = in.read(b);
            if (r == -1) break;
            out.write(b, 0, r);
        }
    }
}

@Getter / @Setter

简化实体类中的get/set方法
在实体类的属性或者类之前,加入@Getter @Setter注解,这样就不需要再写set/get了

@Getter @Setter private int age = 10;

@ToString

替换实体类中的toString方法
只需要再实体类前加入@ToString注释即可

@ToString(callSuper=true, includeFieldNames=true)

@EqualsAndHashCode

Equality made easy: Generates hashCode and equals implementations from the fields of your object.

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

Constructors made to order: Generates constructors that take no arguments, one argument per final / non-null field, or one argument for every field.

@Data

All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!

@Value

Immutable classes made very easy.

@Builder

… and Bob’s your uncle: No-hassle fancy-pants APIs for object creation!

@SneakyThrows

To boldly throw checked exceptions where no one has thrown them before!

@Synchronized

synchronized done right: Don’t expose your locks.

@Getter(lazy=true)

Laziness is a virtue!

@Log

Captain’s Log, stardate 24435.7: What was that line again?

转载请注明:R&M » lombok —— 消除冗长的 java 代码

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

ICP号:京ICP备14044161号;联系我:rm@rmworking.com