簡(jiǎn)單工具類
寫(xiě)作初衷:由于日常開(kāi)發(fā)經(jīng)常需要用到很多工具類,經(jīng)常根據(jù)需求自己寫(xiě)也比較麻煩
網(wǎng)上好了一些工具類例如commom.lang3或者h(yuǎn)utool或者Jodd這樣的開(kāi)源工具,但是
發(fā)現(xiàn)他們之中雖然設(shè)計(jì)不錯(cuò),但是如果我想要使用,就必須要引入依賴并且去維護(hù)依賴,有些
甚至?xí)写嬖诎姹揪幾g不通過(guò)問(wèn)題,故此想要寫(xiě)作一個(gè)每個(gè)類都可以作為獨(dú)立工具類使用
每個(gè)使用者只需要復(fù)制該類,到任何項(xiàng)目當(dāng)中都可以使用,所以需要尊從以下兩個(gè)原則才能
做到.在此誠(chéng)邀各位大佬參與.可以把各自用過(guò)的工具,整合成只依賴JDK,每個(gè)類都能夠單獨(dú)
使用的工具.每個(gè)人當(dāng)遇到業(yè)務(wù)需求需要使用的時(shí)候,只需要到這里單獨(dú)拷貝一個(gè)即可使用.
拋棄傳統(tǒng)的需要引入依賴的煩惱.讓大家一起來(lái)解決你所面臨的業(yè)務(wù)問(wèn)題吧!
介紹
遵從兩大原則
- 1.絕不依賴JDK以外的源碼
- 2.犧牲代碼復(fù)用性,每個(gè)類都必須是單獨(dú)的組件,絕不互相引用,做到完全解耦
package *;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
/**
* @program: simple_tools
* @description:
* @author: ChenWenLong
* @create: 2019-05-30 16:49
**/
public class ObjectUtils {
public static final Null NULL = new Null();
//單例的NULL
public static class Null implements Serializable {
private static final long serialVersionUID = 7092611880189329093L;
Null() {
super();
}
private Object readResolve() {
return ObjectUtils.NULL;
}
}
public ObjectUtils() {
super();
}
/**
* 功能描述:
* 〈設(shè)置一個(gè)默認(rèn)的對(duì)象〉
*
* @params : [object, defaultValue]
* @return : java.lang.Object
* @author : cwl
* @date : 2019/5/30 16:52
*/
public static Object defaultIfNull(Object object, Object defaultValue) {
return object != null ? object : defaultValue;
}
/**
* 功能描述:
* 〈判斷object1和object2是否相等〉
*
* @params : [object1, object2]
* @return : boolean
* @author : cwl
* @date : 2019/5/30 16:52
*/
public static boolean equal(Object object1, Object object2) {
if (object1 == object2) {
return true;
}
if ((object1 == null) || (object2 == null)) {
return false;
}
return object1.equals(object2);
}
/**
* 功能描述:
* 〈獲得obj的hashcode值,如果對(duì)象為null,則默認(rèn)為0〉
*
* @params : [obj]
* @return : int
* @author : cwl
* @date : 2019/5/30 16:53
*/
public static int hashCode(Object obj) {
return (obj == null) ? 0 : obj.hashCode();
}
/**
* 功能描述:
* 〈以字符串的形式返回一個(gè)字符串,該字符串是全限定類名+@+hashCode的16進(jìn)制〉
*
* @params : [object]
* @return : java.lang.String
* @author : cwl
* @date : 2019/5/30 16:55
*/
public static String identityToString(Object object) {
if (object == null) {
return null;
}
StringBuffer buffer = new StringBuffer();
buffer.append(object.getClass().getName())
.append('@')
.append(Integer.toHexString(System.identityHashCode(object)));
return buffer.toString();
}
/**
* 功能描述:
* 〈對(duì)象的toString方法,對(duì)null進(jìn)行空字符串處理〉
*
* @params : [obj]
* @return : java.lang.String
* @author : cwl
* @date : 2019/5/30 16:59
*/
public static String toString(Object obj) {
return obj == null ? "" : obj.toString();
}
/**
* 功能描述:
* 〈對(duì)象的toString方法,對(duì)null進(jìn)行自定義nullStr處理〉
*
* @params : [obj, nullStr]
* @return : java.lang.String
* @author : cwl
* @date : 2019/5/30 17:01
*/
public static String toString(Object obj, String nullStr) {
return obj == null ? nullStr : obj.toString();
}
/**
* 功能描述:
* 〈取實(shí)現(xiàn)了Comparable接口的對(duì)象的最小值,自定義比較方法〉
*
* @params : [c1, c2]
* @return : java.lang.Object
* @author : cwl
* @date : 2019/5/30 17:02
*/
public static Object min(Comparable c1, Comparable c2) {
if (c1 != null && c2 != null) {
return c1.compareTo(c2) < 1 ? c1 : c2;
} else {
return c1 != null ? c1 : c2;
}
}
/**
* 功能描述:
* 〈取實(shí)現(xiàn)了Comparable接口的對(duì)象的最大值,自定義比較方法〉
*
* @params : [c1, c2]
* @return : java.lang.Object
* @author : cwl
* @date : 2019/5/30 17:02
*/
public static Object max(Comparable c1, Comparable c2) {
if (c1 != null && c2 != null) {
return c1.compareTo(c2) >= 0 ? c1 : c2;
} else {
return c1 != null ? c1 : c2;
}
}
/**
* 對(duì)象中是否包含元素<br>
* 支持的對(duì)象類型包括:
* <ul>
* <li>String</li>
* <li>Collection</li>
* <li>Map</li>
* <li>Iterator</li>
* <li>Enumeration</li>
* <li>Array</li>
* </ul>
*
* @param obj 對(duì)象
* @param element 元素
* @return 是否包含
*/
public static boolean contains(Object obj, Object element) {
if (obj == null) {
return false;
}
if (obj instanceof String) {
if (element == null) {
return false;
}
return ((String) obj).contains(element.toString());
}
if (obj instanceof Collection) {
return ((Collection<?>) obj).contains(element);
}
if (obj instanceof Map) {
return ((Map<?, ?>) obj).values().contains(element);
}
if (obj instanceof Iterator) {
Iterator<?> iter = (Iterator<?>) obj;
while (iter.hasNext()) {
Object o = iter.next();
if (equal(o, element)) {
return true;
}
}
return false;
}
if (obj instanceof Enumeration) {
Enumeration<?> enumeration = (Enumeration<?>) obj;
while (enumeration.hasMoreElements()) {
Object o = enumeration.nextElement();
if (equal(o, element)) {
return true;
}
}
return false;
}
if (obj.getClass().isArray() == true) {
int len = Array.getLength(obj);
for (int i = 0; i < len; i++) {
Object o = Array.get(obj, i);
if (equal(o, element)) {
return true;
}
}
}
return false;
}
/**
* 檢查對(duì)象是否為null<br>
* 判斷標(biāo)準(zhǔn)為:
* <pre>
* 1. == null
* 2. equals(null)
* </pre>
*
* @param obj 對(duì)象
* @return 是否為null
*/
public static boolean isNull(Object obj) {
return null == obj || obj.equals(null);
}
/**
* 檢查對(duì)象是否不為null
*
* @param obj 對(duì)象
* @return 是否為null
*/
public static boolean isNotNull(Object obj) {
return null != obj && false == obj.equals(null);
}
}
本文摘自 :https://blog.51cto.com/u