Java之反射机制五:反射优化方式之一
一:实体类
package reflex; public class BigDog extends Dog { private Integer age; public String name; public String name2; public String name3; public String name4; public String name5; public String name6; public String name7; public String name8; public String name9; public String name10; public String name11; public String name12; public BigDog(){} public BigDog(Integer age){ this.age = age; } private void getDog(){} private BigDog(Integer age, String name) { this.age = age; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "BigDog{" + "age=" + age + '}'; } }
二:优化方式之一(不明显)
package reflex; import org.junit.Test; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class ReflectService { private static Map<String, Field> fieldMap = new HashMap<>(); static { Field[] fields = BigDog.class.getDeclaredFields(); Method[] methods = BigDog.class.getDeclaredMethods(); Arrays.asList(fields).forEach(field -> { field.setAccessible(true); String str = field.toString(); String attribute = str.substring(str.lastIndexOf(".")+1); fieldMap.put(attribute,field); }); } public long test() throws Exception { long start = System.currentTimeMillis(); for(int i = 0;i<100000000;i++){ BigDog bigDog = new BigDog(); Field age = bigDog.getClass().getDeclaredField("age"); age.setAccessible(true); age.set(bigDog,1); } long end = System.currentTimeMillis(); System.out.println((end-start)+"ms"); return end-start; } public long test2() throws Exception { long start = System.currentTimeMillis(); for(int i = 0;i<100000000;i++){ BigDog bigDog = new BigDog(); Field age = fieldMap.get("age"); age.set(bigDog,1); } long end = System.currentTimeMillis(); System.out.println((end-start)+"ms"); return end-start; } @Test public void test3() throws Exception{ long test = test(); long test2 = test2(); System.out.println((test - test2)+"ms"); } }
运行结果:
6954ms
1358ms
5596ms
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix