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

做网站上传信息软件2015做啥网站能致富

做网站上传信息软件,2015做啥网站能致富,wordpress 缩略图加上alt,免费的crm管理系统Java类动态替换Class 通过Java的Class对象,可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取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 (Constructor<T> 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类的方法Constructor<FunctionBase>[] methods = cl.getDeclaredConstructors();// 构造参数列表Class<?>[] params = new Class[args.length];for (int i = 0; i < args.length; i++) {params[i] = args[i].getClass();}for (Constructor<T> method : methods) {// 获取构造函数的参数列表Class<?>[] classParams = method.getParameterTypes();if (canReplace(params, classParams)) {// 如果参数相等,设置setAccessible为True,用来访问构造函数method.setAccessible(true);return method.newInstance(args);}}return null;
}}
http://www.yayakq.cn/news/230361/

相关文章:

  • 用友财务软件官方网站网站给部分文字做遮挡代码
  • 广州做网站找哪个公司好网站开发网
  • 重庆江北区网站建设公司微信公众号编辑教程
  • 做物流的都是上什么网站江苏嘉瑞通建设有限公司网站
  • 专门做母婴的网站有哪些wordpress多站点怎么安装主题
  • 推荐网站建设营销推广网站推广方案
  • 网站模板分类wordpress 表结构
  • 这么做网站湘潭响应式网站建设 速来磐石网络
  • 做外贸一般总浏览的网站软件定制开发是货物还是服务
  • 自己公司怎样弄个网站平阳做网站
  • 快速的网站建设福州网站建设市场
  • 软件开发app制作公司有哪些网站做seo 反应非常慢
  • net快速建站海宁市住房和城乡建设网站
  • 安徽 网站建设zenm自己做网站
  • 怎么查看网站dns如何自己弄网站
  • 企业专业搜索引擎优化百度关键词搜索优化
  • php做购物网站详情页的代码公司网页网站建设+ppt模板下载
  • 便利的集团网站建设通讯数码网站
  • 动漫网站设计源代码三星网上商城如何学生认证
  • 大型网站开发模型湖南省郴州市永兴县邮政编码
  • 网站开发网站设计制作网站 关键词 怎么改
  • 北京pk10网站建设wordpress网站源码分享
  • seo 对网站有什么影响网页升级访问中新每天正常更新中
  • 网站网站开发软件网站建设大作业电子版
  • 常德网站公司如何做网站的导航栏
  • 佛山网站建设appwap开头的网站
  • 温州网站优化定制如何在网站上显示百度权重
  • 石家庄网站优化网站改版重新备案
  • 做网站审批号必须要90设计包图网
  • 新乡网站建设哪家正规企业门户网站设计报告