当前位置:   article > 正文

lombok常用注解_lombok 代替try

lombok 代替try

引入pom中依赖:

<dependency>
	<groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

Lombak使用

@Data

@Data最常用的注解之一。注解在类上,提供该类所有属性的getter/setter方法,还提供了equals、canEqual、hashCode、toString方法。

更方便的是,当新增属性或减少属性时,直接删除属性定义即可,效率是否提升了很多?

@NonNull

作用于属性上,提供关于此参数的非空检查(该注解修饰的属性不能为 null),如果参数为空,则抛出空指针异常。

@Setter:注解在属性上,为属性提供 set 方法。
@Getter:注解在属性上,为属性提供 get 方法。
@Builder:构建对象,用在类上面。
@AllArgsConstructor:注解在类上,为类提供一个全参的构造方法。
@NoArgsConstructor:注解在类上,为类提供一个无参的构造方法。
@NonNull:注解在属性上,该注解修饰的属性不能为 null。
@val:注解在属性上,该注解修饰的属性不被设置为 final 类型。
@SneakyThrows:注解在方法上,用于替代try{}catch(){} 这种异常模板。
@toString:生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@RequiredArgsConstructor:该注解通过构造来替代@Autowrited。用法如下:
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RestController
@RequestMapping("/omponent")
public class ComponentController {
    private final ComponentService ComponentService;
}    
ps:写在类上可以代替@AutoWired注解,需要注意的是在注入时需要用final定义,或者使用@Notnull注解

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
@Cleanup

作用于变量,保证该变量代表的资源会被自动关闭,默认调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“methodName”)来指定。

public void jedisExample(String[] args) {
    try {
        @Cleanup Jedis jedis = redisService.getJedis();
    } catch (Exception ex) {
        logger.error(“Jedis异常:”,ex)
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

效果相当于:

public void jedisExample(String[] args) {

    Jedis jedis= null;
    try {
        jedis = redisService.getJedis();
    } catch (Exception e) {
        logger.error(“Jedis异常:”,ex)
    } finally {
        if (jedis != null) {
            try {
                jedis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
@Synchronized

作用于类方法或实例方法上,效果与synchronized相同。区别在于锁对象不同,对于类方法和实例方法,synchronized关键字的锁对象分别是类的class对象和this对象,而@Synchronized的锁对象分别是私有静态final对象lock和私有final对象lock。也可以指定锁对象。

public class FooExample {

    private final Object readLock = new Object();

    @Synchronized
    public static void hello() {
        System.out.println("world");
    }

    @Synchronized("readLock")
    public void foo() {
        System.out.println("bar");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果相当于:

public class FooExample {

    private static final Object $LOCK = new Object[0];
    private final Object readLock = new Object();

    public static void hello() {
        synchronized ($LOCK) {
            System.out.println("world");
        }
    }

    public void foo() {
        synchronized (readLock) {
            System.out.println("bar");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
val

使用val作为局部变量声明的类型,而不是实际写入类型。执行此操作时,将从初始化表达式推断出类型。

public Map<String, String> getMap() {
    val map = new HashMap<String, String>();
    map.put("1", "a");
    return map;
}

效果相当于:

public Map<String, String> getMap() {
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("1", "a");
    return map;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

也就是说在局部变量中,Lombok帮你推断出具体的类型,但只能用于局部变量中。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号