反射妙用-判断对象各成员是否为null

有时候大家会有判断新创建对象各成员是否为null的需求,通过反简单处理,可满足此需求:

import java.lang.reflect.Field;

/**
*
* @author elitesunry
* @mail rysun@qq.com
* @create 2011-5-10 7:21:30
*/
public abstract class ContentNullComparable {

public boolean isEmpty(Object obj) {
return isContentEmpty(this.getClass(), obj);
}

private boolean isContentEmpty(Class<?> clazz, Object obj) {
Field[] fields = clazz.getDeclaredFields();
int nullFiledCount = 0;
for (Field field : fields) {
Object fileldValue = null;
try {
// 这里不对复杂成员对象做嵌套判断
fileldValue = field.get(obj);
} catch (Exception e) {
// ignore
}
if (fileldValue == null) {
nullFiledCount++;
if (nullFiledCount == fields.length) {
return true;
}
}
}
return false;
}
}


继承此类即可:
/**
* @author elitesunry
* @mail rysun@qq.com
* @create 2011-5-7 11:48:27
*/
public class EmptyClass {

public static void main(String[] args) {
A a1 = new A();
System.out.println(a1.isEmpty(a1));
A a2 = new A();
a2.a = "value";
System.out.println(a2.isEmpty(a2));
A a3 = new A();
a3.obj = new A();
System.out.println(a3.isEmpty(a3));
}
}

class A extends ContentNullComparable {
String a;
String b;
A obj;
}


由于java的单继承特性,这样的做法可能会导致你的类不能继承其他的类,你可以采用代理对象的方式解决此问题:

class DelegateContentNullComparable extends ContentNullComparable {
...
}

class YourClass {
...
private DelegateContentNullComparable delegate;
...
delegate.isEmpty(...);
...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值