`
elitesunry
  • 浏览: 37680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

反射妙用-判断对象各成员是否为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(...);
...
}

分享到:
评论

相关推荐

    C#利用反射来判断对象是否包含某个属性的实现方法

    总的来说,反射提供了一种灵活的方式来探索和操作程序的类型和对象,而`ContainProperty`方法是这种能力的一个实际应用,使得我们可以轻松地判断对象是否包含特定的属性,从而在代码中做出相应的决策。

    JAVA基础--JAVA中的反射机制详解

    在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....

    Java软件开发实战 Java基础与案例开发详解 15-1 反射 共13页.pdf

    ### Java反射机制详解 ...综上所述,Java反射机制为开发者提供了强大的工具,使得程序能在运行时灵活地操作类和对象。但需要注意的是,反射操作通常会降低程序的性能,并且可能会破坏封装性和安全性,因此应谨慎使用。

    C#中使用反射遍历一个对象属性及值的小技巧

    对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): 代码如下: Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach ...

    轻松学C之运行时类型标识反射PPT学习教案.pptx

    例如,如果有一个派生自基类的对象,`is`运算符可以用来判断它是否可以被转换为基类类型。 2. **as运算符**:`as`运算符用于安全地尝试类型转换,如果转换失败,它不会抛出异常,而是返回`null`。表达式`expr as ...

    Java反射机制的工作原理详解.docx

    1. **运行时判断对象所属的类**:通过`Object.getClass()`方法可以获取到对象所属的`Class`类型,从而得知对象所属的具体类。 2. **运行时构造任意类的对象**:使用`Class.newInstance()`或`Constructor.new...

    java反射学习资料

    例如,以下代码展示了如何使用反射判断一个对象所属的类: ```java A a = new A(); if (a.getClass() == A.class) { System.out.println("equal"); } else { System.out.println("unequal"); } ``` 这里,`a....

    java反射机制,调用私有方法

    4. **调用静态方法**:`Method`类的`getDeclaredMethod()`方法可以获取类的静态方法,然后通过`invoke(null, parameters)`来调用它们,其中第一个参数为`null`表示调用静态方法,不需要实例对象。 5. **处理数组**...

    JAVA反射机制应用

    3、在运行时判断任意一个类所具有的成员变量和方法 4、在运行时调用任意一个对象的方法 5、生成动态代理 在JAVA反射机制中,Class类和Field类、Method类、Constructor类是最重要的三个类,它们提供了访问类、字段、...

    java反射使用

    4. **调用对象的方法**:可以调用任意一个对象的方法,无论该方法是否为公有。 5. **生成动态代理**:基于反射机制,可以实现动态代理功能。 #### 二、Java反射API详解 为了实现上述功能,Java提供了一系列API,...

    JAVA2 反射技术 pdf

    在Java中,`instanceof`是一个关键字,用于判断一个对象是否是某个类的实例。通过反射,我们也可以实现类似的功能: ```java public class InstanceDemo { public static void main(String[] args) { try { ...

    java面向对象之JVM创建及分配策略方法详解.docx

    逃逸分析是JVM的一种优化技术,用于判断对象的生命周期和作用范围。如果对象在创建后只在当前作用域内使用,没有被其他方法或线程访问,那么JVM可能会选择栈上分配。这样做可以减少堆的压力,提高性能,因为栈上的...

    java反射笔记

    1. **运行时判断类信息**:通过反射,可以在运行时获取到任何类的名称、包名、属性和方法等信息,这对于编写通用性代码或者处理未知类型的对象非常有用。 2. **动态创建对象**:反射可以让我们在运行时根据需要动态...

    Java面试八股文十万字总结.docx

    - **逃逸分析技术**:判断对象的使用范围,优化内存分配。 - **元空间替代永久代的原因**:解决永久代的容量限制问题。 - **Stop The World机制**:暂停所有用户线程以执行GC。 - **OopMap与安全点**:用于确定对象...

    java反射原理制作对象打印工具

    `collectionToStr`方法首先判断对象是否为null,然后尝试将其转换为数组。如果对象是简单类型数组(非对象数组),或者不允许递归,那么直接使用`Arrays.toString`返回。否则,它会调用`complexArrToStr`方法,以更...

    Java 基础核心总结 +经典算法大全.rar

    null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java ...

    java反射机制

    Java 反射机制 Java 反射机制是 Java 语言的一个重要特征,它使得 Java 具有“动态性”。在 Java 运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?...

    Java反射在实际工作中的应用笔记

    首先,我们需要使用反射判断方法是否存在。我们可以使用Java的反射机制来判断某个对象中是否存在某个方法。例如,我们可以使用以下方法来判断某个对象中是否存在某个方法: ```java public static boolean ...

    Java极品学习资料

    - 显式将变量赋值为`null`,表示该变量尚未指向任何对象。 - 示例代码说明不同情况下的表现。 **可变参数为什么定义在参数列表的后面** - Java允许使用可变参数,即形参类型后跟三个点`...`。 - 可变参数必须位于...

Global site tag (gtag.js) - Google Analytics