Learning Java

1. 获取一个对象指定field(无论是否是private,包括父类中的属性)
 

import org.apache.commons.lang3.reflect.FieldUtils;

FieldUtils.getField(clazz, propertyName, true);

需import jar包:org.apache.commons:commons-lang3

2. 创建任意指定类型数组( 例如 [Ljava.lang.String )

背景:

想要对一个对象中所有属性做一些处理,并将处理过后的值设置到该属性。由于这个对象的类别是不知道的,即传过来的是一个Object object,所以必须得用反射机制设置object的属性:获取所有属性,比如x,处理返回x'(Object类型),调用invoke setX(x')。

问题:

set基本类型、Collection、Map之类的,x'(Object类型)转化都没问题,但是遇到array,比如一个属性是String[] records,这时调用setRecords,会报错:Object无法转化为String[]。

解决:

一开始,我将x'声明为Object[],但是Object[]还是无法转化为String[]。由于不能限制x'的类型为String[],因为比如有另外一个属性Integer[] counts; 所以,要得在创建的时候就知道x'是什么类型的数组,并能创建出来。

@SuppressWarnings("unchecked")
public static <T> T[] creatArray(Object object, Integer length) {
	return (T[]) Array.newInstance(object.getClass().getComponentType(), length);
}

猜你喜欢

转载自blog.csdn.net/chunzhenzyd/article/details/84971594