谈谈java反射的应用

阅读: 评论:0

谈谈java反射的应用

谈谈java反射的应用

谈谈java反射的应用

      开发项目期间,遇到这样的一种场景:“统计分析文化节目,文化活动,课程的发布量”,当时自己是这样的做,先做文化节目的统计分析,完了之后,再写文化活动与课程的统计分析,完成之后发现,发现其中三个主要的分析方法惊人的相似,主要是相似指的是“代码层次上的相似”。这几次看到设计模式的书籍,惊人想起那几段代码,感觉有文章可做!

      于是就将反射应用到了其中!下面就是跟项目类似的场景代码!

首先先看看最初的代码:

首先分析的实体类Lesson.java:

package flectTwo;import java.util.Date;/*** @author 钟林森*/
public class Lesson{public String name;public Date createTime;public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {ateTime = createTime;}public Lesson() {}public Lesson(String name) {super();this.name = name;}
}	
实体类Program.java:

package flectTwo;import java.util.Date;/*** @author 钟林森*/
public class Program{public String name;public Date uploadTime;public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getUploadTime() {return uploadTime;}public void setUploadTime(Date uploadTime) {this.uploadTime = uploadTime;}public Program(String name) {super();this.name = name;}public Program() {super();}
}
然后,下面就是分析节目与课程的代码,直接上代码吧!理解起来也简单:

package flectTwo;import java.util.ArrayList;
import java.util.List;/*** @author 钟林森*/
public class AnaylyseLessonAndProgramClass {private static List<Program> listProgram=new ArrayList<>();private static List<Lesson> listLesson=new ArrayList<>();static{Program program1=new Program("aa");Program program2=new Program("ab");Program program3=new Program("bb");Program program4=new Program("bc");Program program5=new Program("ac");listProgram.add(program1);listProgram.add(program2);listProgram.add(program3);listProgram.add(program4);listProgram.add(program5);Lesson lesson1=new Lesson("aa");Lesson lesson2=new Lesson("ab");Lesson lesson3=new Lesson("bb");Lesson lesson4=new Lesson("bc");Lesson lesson5=new Lesson("ac");listLesson.add(lesson1);listLesson.add(lesson2);listLesson.add(lesson3);listLesson.add(lesson4);listLesson.add(lesson5);}public static void main(String[] args) {int total1=analyseProgramList();System.out.println(total1);int total2=analyseLessonList();System.out.println(total2);}//分析节目:查看节目名称含有 指定字符 的节目public static int analyseProgramList(){int total=0;Program program=null;for(int i=0;i<listProgram.size();i++){program&#(i);if (Name().contains("c")) {total += 1;}}return total;}//分析课程:同理public static int analyseLessonList(){int total=0;Lesson lesson=null;for(int i=0;i<listLesson.size();i++){lesson&#(i);if (Name().contains("c")) {total += 1;}}return total;}
}

代码你会发现,惊人的相似,于是乎,我采用反射进行了重构:

package flectTwo;import flect.Method;
import java.util.ArrayList;
import java.util.List;/*** @author 钟林森* 反射的应用:超棒*/
public class AnalyseLessonAndProgramClassReflect {private static List<Program> listProgram=new ArrayList<>();private static List<Lesson> listLesson=new ArrayList<>();static{Program program1=new Program("aa");Program program2=new Program("ab");Program program3=new Program("bb");Program program4=new Program("bc");Program program5=new Program("ac");listProgram.add(program1);listProgram.add(program2);listProgram.add(program3);listProgram.add(program4);listProgram.add(program5);Lesson lesson1=new Lesson("aa");Lesson lesson2=new Lesson("ab");Lesson lesson3=new Lesson("bb");Lesson lesson4=new Lesson("bc");Lesson lesson5=new Lesson("ac");listLesson.add(lesson1);listLesson.add(lesson2);listLesson.add(lesson3);listLesson.add(lesson4);listLesson.add(lesson5);}public static void main(String[] args) {int toal1=analyseList2(listLesson, "getName", "c");System.out.println(toal1);}/*** 分析:具有通用性!* @author zhonglinsen* @param objParam:接收统一的参数-如listProgram,listLesson* @param methodParam:需要调用的对象的方法名* @param likeCharacterParam:需要模糊查询的指定字符* @return*/@SuppressWarnings("unchecked")public static int analyseList2(Object objParam,String methodParam,String likeCharacterParam){int total=0;List<Object> objList=new ArrayList<>();if (objParam instanceof List) {objList=(List<Object>) objParam;}if (objList!=null && objList.size()>0) {try {for(Object tempObj:objList){Method method&#Class().getMethod(methodParam);String result=(String) method.invoke(tempObj);if (ains(likeCharacterParam)) {total += 1;}}} catch (Exception e) {System.out.Message());}}return total;}
}

好了,就介绍到这里吧!觉得那句“反射反射,程序员的快乐!”真的很有道理!对代码的重构真是起到了很大的作用!想与我交流的可以在下面留言,或者加群:java修炼塔 535296702,我叫debug,欢迎交流!



本文发布于:2024-02-04 13:43:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170708566056085.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:反射   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23