其實(shí)不用那么麻煩,只用定義一個(gè)方法,然后使用下面的代碼片段來(lái)判斷字段是否為空:
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、湖里ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的湖里網(wǎng)站制作公司
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (f.get(obj) == null) { //判斷字段是否為空,并且對(duì)象屬性中的基本都會(huì)轉(zhuǎn)為對(duì)象類型來(lái)判斷
......
}
}
Guest guest = (Guest)session.getAttribute("guest");
if(guest==null){
getServletContext().getRequestDispatcher(
"/error.jsp").forward(request, response);
在java中null并不是一個(gè)對(duì)象,但可以判斷一個(gè)引用類型數(shù)據(jù)是否為空,用==來(lái)判斷,而且null同時(shí)用來(lái)釋放內(nèi)存,所以可以給對(duì)象用來(lái)賦值或者判斷。
/**?
*?判斷對(duì)象或?qū)ο髷?shù)組中每一個(gè)對(duì)象是否為空:?對(duì)象為null,字符序列長(zhǎng)度為0,集合類、Map為empty?
*??
*?@param?obj?
*?@return?
*/??
public?static?boolean?isNullOrEmpty(Object?obj)?{??
if?(obj?==?null)??
return?true;??
if?(obj?instanceof?CharSequence)??
return?((CharSequence)?obj).length()?==?0;??
if?(obj?instanceof?Collection)??
return?((Collection)?obj).isEmpty();??
if?(obj?instanceof?Map)??
return?((Map)?obj).isEmpty();??
if?(obj?instanceof?Object[])?{??
Object[]?object?=?(Object[])?obj;??
if?(object.length?==?0)?{??
return?true;??
}??
boolean?empty?=?true;??
for?(int?i?=?0;?i??object.length;?i++)?{??
if?(!isNullOrEmpty(object[i]))?{??
empty?=?false;??
break;??
}??
}??
return?empty;??
}??
return?false;??
}??
應(yīng)用場(chǎng)景:
讀取excel文件,轉(zhuǎn)化為一個(gè)二維數(shù)組:Object[][]?arrays
但是excel中有空行,所以需要過(guò)濾Object[][]?arrays中的空的一維數(shù)組:
Java代碼??
/***?
*?過(guò)濾數(shù)組中的空元素?
*??
*??
*?@param?arrays?
*?@return?
*/??
public?static?Object[][]?filterEmpty(Object[][]?arrays)?{??
int?sumNotNull?=?0;??
/***?
*?統(tǒng)計(jì)非空元素的總個(gè)數(shù)?
*/??
for?(int?i?=?0;?i??arrays.length;?i++)?{??
Object?object?=?arrays[i];??
if?(!ValueWidget.isNullOrEmpty(object)??
!SystemUtil.isNullOrEmpty((Object[])?object))?{//?判斷元素是否為空??
sumNotNull?=?sumNotNull?+?1;??
}??
}??
Object[][]?filtedObjs?=?new?Object[sumNotNull][];??
int?index?=?0;??
for?(int?i?=?0;?i??arrays.length;?i++)?{??
Object[]?object_tmp?=?arrays[i];??
if?(!ValueWidget.isNullOrEmpty(object_tmp)??
!SystemUtil.isNullOrEmpty((Object[])?object_tmp))?{//?判斷元素是否為空??
filtedObjs[index++]?=?object_tmp;??
}??
}??
return?filtedObjs;??
}??
判斷對(duì)象的所有成員變量是否為空
Java代碼??
/***?
*?Determine?whether?the?object's?fields?are?empty?
*??
*?@param?obj?
*?@param?isExcludeZero??:true:數(shù)值類型的值為0,則當(dāng)做為空;----false:數(shù)值類型的值為0,則不為空?
*??
*?@return?
*?@throws?SecurityException?
*?@throws?IllegalArgumentException?
*?@throws?NoSuchFieldException?
*?@throws?IllegalAccessException?
*/??
public?static?boolean?isNullObject(Object?obj,?boolean?isExcludeZero)??
throws?SecurityException,?IllegalArgumentException,??
NoSuchFieldException,?IllegalAccessException?{??
if(ValueWidget.isNullOrEmpty(obj)){//對(duì)象本身就為null??
return?true;??
}??
ListField?fieldList?=?ReflectHWUtils.getAllFieldList(obj.getClass());??
boolean?isNull?=?true;??
for?(int?i?=?0;?i??fieldList.size();?i++)?{??
Field?f?=?fieldList.get(i);??
Object?propertyValue?=?null;??
try?{??
propertyValue?=?getObjectValue(obj,?f);??
}?catch?(NoSuchFieldException?e)?{??
e.printStackTrace();??
}??
if?(!ValueWidget.isNullOrEmpty(propertyValue))?{//?字段不為空??
if?(propertyValue?instanceof?Integer)?{//?是數(shù)字??
if?(!((Integer)?propertyValue?==?0??isExcludeZero))?{??
isNull?=?false;??
break;??
}??
}?else?if?(propertyValue?instanceof?Double)?{//?是數(shù)字??
if?(!((Double)?propertyValue?==?0??isExcludeZero))?{??
isNull?=?false;??
break;??
}??
}else?if?(propertyValue?instanceof?Float)?{//?是數(shù)字??
if?(!((Float)?propertyValue?==?0??isExcludeZero))?{??
isNull?=?false;??
break;??
}??
}else?if?(propertyValue?instanceof?Short)?{//?是數(shù)字??
if?(!((Short)?propertyValue?==?0??isExcludeZero))?{??
isNull?=?false;??
break;??
}??
}else?{??
isNull?=?false;??
break;??
}??
}??
}??
return?isNull;??
}??
測(cè)試:
Java代碼??
@Test??
public?void?test_isNullObject()?throws?SecurityException,??
IllegalArgumentException,?NoSuchFieldException,??
IllegalAccessException?{??
Person2?p?=?new?Person2();??
Assert.assertEquals(true,?ReflectHWUtils.isNullObject(p,?true));??
Assert.assertEquals(false,?ReflectHWUtils.isNullObject(p,?false));??
p.setAddress("beijing");??
Assert.assertEquals(false,?ReflectHWUtils.isNullObject(p,?true));??
Assert.assertEquals(false,?ReflectHWUtils.isNullObject(p,?false));??
p.setAddress(null);??
p.setId(0);??
Assert.assertEquals(true,?ReflectHWUtils.isNullObject(p,?true));??
Assert.assertEquals(false,?ReflectHWUtils.isNullObject(p,?false));??
}??
Person2?源代碼(省略getter,setter方法):
Java代碼??
import?java.sql.Timestamp;??
public?class?Person2?{??
private?int?id;??
private?int?age;??
private?double?weight;??
private?String?personName;??
private?Timestamp?birthdate;??
public?String?identitify;??
protected?String?address;??
String?phone;??
}
方法一:
先把int類型的數(shù)據(jù)轉(zhuǎn)換成String類型,然后判斷String類型的數(shù)據(jù)是否為空。
示例代碼:
int point;
String val=point +"";
if("".equals(val)){
// do something...
}
PS:int point不是對(duì)象,int類型為空時(shí)默認(rèn)為0。
方法二:
如果point是int類型,則得到的結(jié)果是不可能是null的。
如果插入一條數(shù)據(jù)時(shí)沒(méi)有插入給字段,而數(shù)據(jù)庫(kù)里默認(rèn)是null的值的話,可以使用
Integer point= GiftInfo.getPoints();
然后判斷point是否等于空。
示例代碼:
Integer point= GiftInfo.getPoints();
if(point == null){
// do something...
}
PS:GiftInfo.getPoints返回的是Integer類型,Integer類型是包括基本類型的包裝類,不給賦值的時(shí)候?yàn)閚ull。
在Java中,一個(gè)類為空的判斷是常用的功能。但是各種類的空判斷卻不一樣
當(dāng)一個(gè)方法返回的是一個(gè)Object時(shí),應(yīng)使用==null來(lái)判斷是否為空,例如在Servlet中的session判斷用戶是否登錄可以用如下的代碼
if (session.getAttribute("LoginUser")==null){
.............
}
但是如果是一個(gè)String類型的變量,或者某一個(gè)方法返回的是String類型的結(jié)果。其判斷為空的方式又不一樣了。需要使用String類中的equals方法。例如在JSP中獲取URL中的參數(shù),為保險(xiǎn)起見(jiàn),可以先判斷這個(gè)參數(shù)是否為空,不空再獲取。如果直接獲取,一旦這個(gè)參數(shù)沒(méi)有, 會(huì)造成空指向異常。代碼如下
if (request.getParameter("id").toString().equals(null)){
out.println("未提供參數(shù)");
}else{
String id=request.getParameter("id").toString();
out.println(id);
}
假設(shè)頁(yè)面地址為
如果不加判斷 直接使用
String id=request.getParameter("id").toString();
out.println(id);
會(huì)造成空指向異常,而使用了判斷后,這種情況下不報(bào)錯(cuò),在頁(yè)面上顯示“未提供參數(shù)”。如果地址欄輸入的是
則頁(yè)面輸出“123”
另外在字符串的“空”驗(yàn)證時(shí)還要注意一種情況,那就是“”空。
如果假想Java中有指針的概念的話,String a為null空,則表示變量沒(méi)有指針去映射它;而String a為“”空,則表示該字符串有指針映射,但是映射到的內(nèi)容為空。
本文題目:java項(xiàng)目存在判空代碼 java實(shí)體類判空
文章轉(zhuǎn)載:http://www.rwnh.cn/article34/doohdse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制網(wǎng)站、網(wǎng)站策劃、網(wǎng)站維護(hù)、網(wǎng)站收錄、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)