当前位置: 首页 > news >正文

自然资源部网站绿色矿山建设建设银行业务管理中心网站

自然资源部网站绿色矿山建设,建设银行业务管理中心网站,现在最火的社交电商平台,检察院门户网站建设报告Java类动态替换Class 通过Java的Class对象#xff0c;可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类#xff0c;可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoade…Java类动态替换Class 通过Java的Class对象可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoader LinduoClass.class.getClassLoader();利用ClassLoader传入ClassName就可以加载类 ClassLoader classLoader LinduoClass.class.getClassLoader(); Class? myClass classLoader.loadClass(com.linduo.test.TestClass);现在可以把Class加载出来。要创建类对象的话需要知道Class的构造函数以及构造函数的各个参数。 getDeclaredConstructors Java.lang.Class类提供了getDeclaredConstructors。通过这个方法可以获取类中所有声明的构造函数。 ClassLoader classLoader LinduoClass.class.getClassLoader(); Class? myClass classLoader.loadClass(com.linduo.test.TestClass); // 获取所有构造函数 Constructor?[] methods myClass.getDeclaredConstructors();getParameterTypes Method类型提供了getParameterTypes方法它用于获取方法的参数类型Constructor也是方法 ClassLoader classLoader LinduoClass.class.getClassLoader(); Class? myClass classLoader.loadClass(com.linduo.test.TestClass); // 获取所有构造函数 Constructor?[] methods myClass.getDeclaredConstructors(); // 获取构造函数的参数类型 for (ConstructorT method : methods) { // 获取每个构造函数的参数类型Class?[] paramTypes method.getParameterTypes(); }Method类提供的newInstance可以用于创建并返回指定类的实例。 // 可变参数表示要传递给构造函数的参数列表 public Object newInstance(Object... initargs)动态替换Class对象 基于上面的几个方法可以实现动态替换Class对象。比如FunctionA和FunctionB同时继承了FunctionBase。可以在代码中利用上面的方式将FunctionA动态替换为FunctionB。 class FunctionBase {plublic FunctionBase(int a, int b) {} }class FunctionA extends FunctionBase {plublic FunctionA (int a, int b) {super(a, b)} }class FunctionB extends FunctionBase {plublic FunctionA (int a, int b) {super(a, b)} }// 某处代码中将A替换为B。 int arg1 1; int arg2 2; FunctionBase myFunction replaceToB(FunctionA.class, arg1 , arg2);上述代码中可以将FunctionA动态替换为FunctionB。Linduo.replaceToB的具体实现如下。 public boolean canReplace(params, classParams) {// 长度不等if (params.length ! classParams.length) {return false;}// 判断参数类型是否相同int count 0;for (int i 0; i params.length; i) {if (params[i] classParams[i]) {count;}}if (count params.length) {// 相等return true;} return false; }public FunctionBase replaceToB(Class? classA, Object... args) {String name;String nameA classA.getName();if (nameA ! com.linduo.FunctionA) {return null;} else {// 如果是FunctionA类则使用FunctionB代替。name FunctionB.class.getName();}// 加载FunctionB类Class cl Linduo.class.getClassLoader().loadClass(name);// 获取B类的方法ConstructorFunctionBase[] methods cl.getDeclaredConstructors();// 构造参数列表Class?[] params new Class[args.length];for (int i 0; i args.length; i) {params[i] args[i].getClass();}for (ConstructorT method : methods) {// 获取构造函数的参数列表Class?[] classParams method.getParameterTypes();if (canReplace(params, classParams)) {// 如果参数相等设置setAccessible为True用来访问构造函数method.setAccessible(true);return method.newInstance(args);}}return null; }}
http://www.zqtcl.cn/news/993578/

相关文章:

  • 做北京电梯招标的网站衡阳县专业做淘宝网站
  • 建设网站的语言wordpress主题自定义添加后台设置
  • 制造动漫网站开发目的四川酒店网站建设
  • 中国城市建设研究院深圳分院网站广西圣泰建设工程有限公司网站
  • 网站建设的方法有哪些内容wordpress展示插件
  • 北京手机网站制作公司wordpress 简易教程
  • 手机网站建站公司有哪些搜索引擎收录
  • 仿同程网 连锁酒店 网站模板学校网站建设用哪个系统
  • 教做甜品的网站删除wordpress主题字体载入
  • 做酒店网站所用到的算法wordpress侧栏导航
  • 做漫画的网站有哪些信息门户网站怎么做
  • 九江集团网站建设公司信誉好的广州做网站
  • 福州网站建设服务平台今天发生的重大新闻
  • 招聘信息网搜索引擎优化代理
  • 免费的企业网站cms纯文字logo在线制作
  • 深圳电器公司官网网站建设 网站优化
  • 大连 网站建设昆明建设网站哪家好
  • 网站首页设计及运行效果网站建设与管理任务分工
  • 自己建设论坛网站家用电脑搭建服务器
  • 做网站上海公司企业网站内页
  • 手机网站seo山东网站建设网
  • 溧阳 招网站开发wordpress 占内存
  • 网站seo 工具做网站建设公司排名
  • 丹阳网站建设企业建设网站管理制度
  • 怎样审请网站集成装修全屋定制
  • 好看响应式网站模板下载可以访问的国外网站
  • 做电脑网站宽度网站建立安全连接失败
  • 西安网站设计哪家公司好my12777域名查询
  • 西宁网站建设排名网站设计对网站建设有哪些意义?
  • 北京平台网站建设价位怎样做网站卖网站