分享工作中常用的一些java原生工具类

310 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

前言:

随着java生态环境越来越完善,出来的框架越来越多,每个框架都会自带一些工具类,比如SpringStringUtilsCollectionUtils,还有一些专门的工具类框架,例如GoogleGuava和国产的Hutool,这些都是一些很好的工具类,但是我们也不能忽视Java自带的一些工具类,合理的使用这些工具类可以更好的提升我们的开发效率,使我们代码可读性更好!下面介绍一下我在工作中常用的一些Java自带的工具类,欢迎大家在下面补充踊跃评论!

一丶Objects

在我们工作中避免不了一些判空的场景,我们在刚开始工作的时候使用 xxx != null 来进行判空,其实在我们的Objects工具类中就提供了判空的方法,这个方法在我们JDK源码中也经常出现。

  • Objects.isNull(Object obj) :obj为null返回True,不为null返回False
  • Objects.nonNull(Object obj) :obj不为null返回True,为null返回False
  • Objects.requireNonNull(T obj) :obj不为null,抛出NullPointerException异常
  • Objects.requireNonNull(T obj, String message) :obj不为null,抛出message为自己定义的NullPointerException异常
public class Book {
    private Long id;
    private String name;
    private String category;
    private Integer score;
    private String intro;

    public static void main(String[] args) {
        Book book = new Book();
        Book bookNull = null;
        System.out.println(Objects.isNull(book));  // true
        System.out.println(Objects.nonNull(book));  // false
        System.out.println(Objects.requireNonNull(bookNull, "book is null."));  // 抛异常
    }

}

我们工作中也经常会需要比较两个值是否相等,因为我们知道我们顶层父类Object会自带equals方法,我们一般会用xxx.equals(xxx)来进行比较两个值是否相等,其实在我们Objects工具类中也提供了equals方法;

  • Objects.equals(Object a, Object b):如果a和b不相等返回false,相等返回true 但是在Objects中没有 notEquals 方法,我们在项目中可以使用Spring中的 ObjectUtils.notEqual 方法
public static void main(String[] args) {
    String str1 = "aaa";
    String str2 = "aaa";
    System.out.println(Objects.equals(str1, str2));  // true
}

可能有小伙伴会说我用!=nullequals 方法也可以实现这些需求,为什么还要用这些工具类,因为我们在项目中使用Java自带的工具类进行判空和比较,这样大家可以统一代码规范,就不会出现一个项目中一部分人使用原生的 != 而一部分人使用工具类进行操作,在Objects中还有一些方法,比如 toString , hashCode ,感兴趣的小伙伴可以自己去了解一下

二丶Collections

如果说我们项目代码中处理最多的类型那一定莫过于集合类型,原生集合也会带有很多方法,比如add(),remove(),addAll(),我们也会使用Spring自带的CollectionUtils来进行一些判断集合是不是空集合的操作,但是在我们Jdk中其实也有一个集合的工具类,相信大家也用过,我这边就说几个大家可能用得少的但是很实用的方法。

  • reverse(List<?> list) :反转list集合中的元素
  • addAll(Collection<? super T> c, T… elements) :将所有指定元素加入集合中
  • emptyList():返回一个空的list,我们在需要返回一个不进行操作的空集合就可以使用这个方法,这个方法创建的集合不能进行新增和删除操作
  • emptyMap() :返回一个空的map,这个方法创建的集合不能进行新增和删除操作
  • singletonList :返回只包含指定对象的不可改变的列表,这个建议在我们明确这个集合只有一个数据的时候使用,使用这个方法创建的只有一个长度的集合会比我们创建集合对象存放一个值的效率高
private static final List<Integer> ints = new ArrayList<>();

static {
    ints.add(1);
    ints.add(2);
    ints.add(3);
    ints.add(4);
}

public static void main(String[] args) {
    Collections.reverse(ints);
    ints.add(5);
    System.out.println(ints); // [4, 3, 2, 1, 5]
    
    List<Integer> emptyList = Collections.emptyList();
    List<Integer> singletonList = Collections.singletonList(6);
    emptyList.add(1); // 抛异常
    singletonList.add(2); // 抛异常
}

总结

如果我们在工作开发中每个人跨出这微小的一步,项目的代码可读性就能跨出一大步,希望大家在工作中不要忽视这些jdk已经给我们造好的小轮子,如果你也了解其他的一些jdk造好的”小轮子“,欢迎在评论区留言分享!!!