有时候大家会有判断新创建对象各成员是否为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(...);
...
}
分享到:
相关推荐
总的来说,反射提供了一种灵活的方式来探索和操作程序的类型和对象,而`ContainProperty`方法是这种能力的一个实际应用,使得我们可以轻松地判断对象是否包含特定的属性,从而在代码中做出相应的决策。
在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....
### Java反射机制详解 ...综上所述,Java反射机制为开发者提供了强大的工具,使得程序能在运行时灵活地操作类和对象。但需要注意的是,反射操作通常会降低程序的性能,并且可能会破坏封装性和安全性,因此应谨慎使用。
对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): 代码如下: Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach ...
例如,如果有一个派生自基类的对象,`is`运算符可以用来判断它是否可以被转换为基类类型。 2. **as运算符**:`as`运算符用于安全地尝试类型转换,如果转换失败,它不会抛出异常,而是返回`null`。表达式`expr as ...
1. **运行时判断对象所属的类**:通过`Object.getClass()`方法可以获取到对象所属的`Class`类型,从而得知对象所属的具体类。 2. **运行时构造任意类的对象**:使用`Class.newInstance()`或`Constructor.new...
例如,以下代码展示了如何使用反射判断一个对象所属的类: ```java A a = new A(); if (a.getClass() == A.class) { System.out.println("equal"); } else { System.out.println("unequal"); } ``` 这里,`a....
4. **调用静态方法**:`Method`类的`getDeclaredMethod()`方法可以获取类的静态方法,然后通过`invoke(null, parameters)`来调用它们,其中第一个参数为`null`表示调用静态方法,不需要实例对象。 5. **处理数组**...
3、在运行时判断任意一个类所具有的成员变量和方法 4、在运行时调用任意一个对象的方法 5、生成动态代理 在JAVA反射机制中,Class类和Field类、Method类、Constructor类是最重要的三个类,它们提供了访问类、字段、...
4. **调用对象的方法**:可以调用任意一个对象的方法,无论该方法是否为公有。 5. **生成动态代理**:基于反射机制,可以实现动态代理功能。 #### 二、Java反射API详解 为了实现上述功能,Java提供了一系列API,...
在Java中,`instanceof`是一个关键字,用于判断一个对象是否是某个类的实例。通过反射,我们也可以实现类似的功能: ```java public class InstanceDemo { public static void main(String[] args) { try { ...
逃逸分析是JVM的一种优化技术,用于判断对象的生命周期和作用范围。如果对象在创建后只在当前作用域内使用,没有被其他方法或线程访问,那么JVM可能会选择栈上分配。这样做可以减少堆的压力,提高性能,因为栈上的...
1. **运行时判断类信息**:通过反射,可以在运行时获取到任何类的名称、包名、属性和方法等信息,这对于编写通用性代码或者处理未知类型的对象非常有用。 2. **动态创建对象**:反射可以让我们在运行时根据需要动态...
- **逃逸分析技术**:判断对象的使用范围,优化内存分配。 - **元空间替代永久代的原因**:解决永久代的容量限制问题。 - **Stop The World机制**:暂停所有用户线程以执行GC。 - **OopMap与安全点**:用于确定对象...
`collectionToStr`方法首先判断对象是否为null,然后尝试将其转换为数组。如果对象是简单类型数组(非对象数组),或者不允许递归,那么直接使用`Arrays.toString`返回。否则,它会调用`complexArrToStr`方法,以更...
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 public static boolean ...
- 显式将变量赋值为`null`,表示该变量尚未指向任何对象。 - 示例代码说明不同情况下的表现。 **可变参数为什么定义在参数列表的后面** - Java允许使用可变参数,即形参类型后跟三个点`...`。 - 可变参数必须位于...