如下为笔者在开发过程中遇到的一些工具类,其中equals方法及isNull nonNull比较常用,故将Objects类的工具方法都进行一个总结。供大家参考及自己记录总结
1.equals(Object a, Object b)主要用于两个对象的比较,和我们自己写的equals方法差别较小,多了判空和地址的直接比较,调用时避免了我们自己判空的繁琐操作。
源码如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
2.deepEquals(Object a, Object b)
主要也是用于两个对象的比较,比equals(Object a, Object b)强大的是可以对两个数组进行判断,故在数组判断时可以调用。
PS:多维数组也可进行比较
源码如下:
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
3.hashCode(Object o)
获取参数传入的对象的hash值,假如传入的是Null,则返回0.
源码如下:
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
4.hash(Object… values)
获取Object数组的hash值
源码如下:
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
5.toString(Object o)
返回Object对象的toString方法。假如传入的是null,则返回值为字符串"null"
源码如下:
public static String toString(Object o) {
return String.valueOf(o);
}
6.toString(Object o, String nullDefault)
返回Object对象的toString方法。假如传入的是null,则返回值为参数二字符串nullDefault
源码如下:
public static String toString(Object o, String nullDefault) {
return (o != null) ? o.toString() : nullDefault;
}
7.requireNonNull(T obj)
对传入的对象进行判空操作,假如为空,则直接抛出异常,假如不为空,则返回对象本身。
源码如下:
public static8.requireNonNull(T obj, String message)T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
对传入的对象进行判空操作,假如为空,则直接抛出异常,假如不为空,则返回对象本身,第二个参数为传入异常message。
源码如下:
public static9.isNull(Object obj)T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; }
对传入的对象进行判空
源码如下:
public static boolean isNull(Object obj) {
return obj == null;
}
10.nonNull(Object obj)
对传入的对象进行非空判断
源码如下:
public static boolean nonNull(Object obj) {
return obj != null;
}
11.compare(T a, T b, Comparator super T> c)
对传入的对象a和对象b进行比较,必须是同一个类的实例,且参数3为一个比较器Comparator
源码如下
public staticint compare(T a, T b, Comparator super T> c) { return (a == b) ? 0 : c.compare(a, b); }
示例:
import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
@Builder
public class Student implements KeyListbase{
@ListIndex(0) private String name;
@ListIndex(1) private Long id;
@ListIndex(2) private Double point;
public Student(List
@Test
public void test2(){
Student student1 = Student.builder().id(11L).name("wangdong").point(60D).build();
Student student2 = Student.builder().id(12L).name("tangy").point(69D).build();
int compare = Objects.compare(student1, student2, (o1, o2) -> {
double v = o1.getPoint() - o2.getPoint();
return (int) v;
});//返回值为两人分数的比较,假如为正数,那么a对象的分数大于b对象。反则则b大于a。还可以通过自定义比较器实现其它比较功能
System.out.println(compare);
}



