如何使用Java的发射机制遍历所有字段的修改值
2021-08-12 14:21:29
浏览数 (1932)
先给大家介绍下java遍历所有字段修改值的代码,具体内容详情如下所示:
java 通过反射遍历所有字段修改值,避免重复set、get 比如一张表里的字段十几个,而这个表里的图片存储字段有八九个,在返回这个实体类的时候,要对图片进行加密或者其他操作,那就要在实体类查询结果出来后,一个个的get修复,再set赋值,代码量很多,另外如果有多个接口用到,就会产生重复代码; 通过java 的反射,遍历所有字段,进行一个判断,取出来的值是带有图片链接的,进行操作,省去了很多代码,下面贴代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ClassUtil {
private final Logger logger = LoggerFactory.getLogger(getClass());
/**
* 通过反射所有字段,带有图片的字段,重新赋值
*
* @param obj 对象
*/
public void setImageValue(Object obj) {
try {
Class aClass = obj.getClass();
Field[] fields = aClass.getDeclaredFields();
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
aClass);
// 获取get方法
Method getMethod = pd.getReadMethod();
// 获取set方法
Method setMethod = pd.getWriteMethod();
// 通过get方法获取到值
Object o = getMethod.invoke(obj);
if (o != null) {
String s = o.toString();
if (s.contains("jpg")) {
// 业务操作
// 更新为新的值
setMethod.invoke(obj, builder.toString());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ps:下面看下Java数组遍历的几种方式
数组遍历方式参考:
方法一:for循环遍历
public static void main(String[] args) {
int Arr[][]={{1,2,3},{4,5,6}};
for (int i = 0; i < Arr.length; i++) {
for (int j = 0; j < Arr[i].length; j++) {
System.out.print(Arr[i][j]+" ");
}
}
}
方法二:foreach遍历
int a[] = {1,2,3,4} ;
for (int element:a){
System.out.println(element);
}
方法三:Arrays工具类中toString (或deepToString)静态方法遍历
int a[] = {1,2,3,4} ;
int b[][] = {{3,4},{1,2}};
System.out.println(Arrays.toString(a));
System.out.println(Arrays.deepToString(b));
以上就是java 通过反射遍历所有字段修改值的实例代码的详细内容,更多关于java发射机制应用的资料,请多多关注W3Cschool其它相关文章!