Atitit.跨语言反射api 兼容性提升与增强 java c#。Net php js
Atitit.跨语言反射api 兼容性提升与增强 java c#。Net php js
1. 什么是反射1
1.1. 反射提供的主要功能:2
1.2. 实现反射的过程:2
2. 类反射中所必须的类: 的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,2
3. . 反射的用处3
3.1. 可视化 3
3.2. 系统的灵活性、可扩展性 3
3.3. Json xml序列化3
3.4. 函数指针3
3.5. Rpc3
4. 常用的反射api4
4.1. Apache common-lang 。Reflect 5个类4
4.2. java.lang.reflect; 20个类4
4.3. C# 。Net反射api4
4.4. Php ReflectionClass ReflectionMethod 4
5. C# java的区别实现5
6. 参考5
1. 什么是反射
在运行时环境,能否根据一个类的名字,来得到这个类的属性和方法?对于任何一个运行时的对象能否动态调用这个对象的方法?答案是可以的。这种动态的获取类的信息以及动态调用一个对象的方法的机制叫做反射。
什么是反射:
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中 LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。
1.1. 反射提供的主要功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造一个类的对象
3.在运行时判断一个类所具有的属性和方法
4.在运行时调用一个对象的方法
1.2. 实现反射的过程:
1.加载一个类
2.根据这个类动态创建一个对象
3. 动态得到这个对象的方法
4.调用这个对象的方法
允许程序于执行期 Reflection APIs 取得任何已知名称之 class 的內部信息,包括 package、type parameters、superclass、implemented interfaces、inner classes, outer class, fields、constructors、methods、modifiers,並可于执行期生成instances、变更 fields 內容或唤起 methods。
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
2. 类反射中所必须的类: 的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,
下面我将对这些类做一个简单的说明。
Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。
Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。
Method类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。
Class类:类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
Object类:每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
3. . 反射的用处
3.1. 可视化
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
3.2. 系统的灵活性、可扩展性
大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能
3.3. Json xml序列化
3.4. 函数指针
3.5. Rpc
private String exe(HttpServletRequest req) {
String meth = req.getParameter("method");
Handler hd = (Handler) mp.get(meth);
if (hd != null) {
try {
return (String) hd.handleReq(req);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return e.getMessage();
}
}
if (hd == null) {
String classname = refx.getClassName(meth);
String meth_name = refx.getMethodName(meth);
Object o;
try {
o = ConstructorUtils.invokeConstructor(
Class.forName(classname), null);
MethodUtils.invokeMethod(o, meth_name, null);
} catch (Exception e) {
return core.toJsonStrO88(e);
}
4. 常用的反射api
获取实例,调用方法,获取方法与属性集合。 获取注释 获取anno
4.1. Apache common-lang 。Reflect 5个类
4.2. java.lang.reflect; 20个类
o = ConstructorUtils.invokeConstructor(
Class.forName(classname), null);
Object invokeMethod_ret = MethodUtils.invokeMethod(o, meth_name,
req);
4.3. C# 。Net反射api
4.4. Php ReflectionClass ReflectionMethod
$class = new ReflectionClass('Person');//建立 Person这个类的反射类
5. C# java的区别实现
不过在C#可以加载程序集Assembly.LoadFile("文件路径");,JAVA中好
像没有,因为JAVA最多也就打个JAR包。
在类的里面的方法,属性都可以用for或者foreach打印出来。
总结:
看来两种语言在互相学习,互相COPY,嘿嘿。竟然做一个反射,
思路一样的。只不过在JAVA中,用的是CLASS,而C#用的是TYPE。
继续努力,加油!!!
6. 参考
PHP的反射机制 - guisu,程序人生。 逆水行舟,不进则退。 - 博客频道 - CSDN.NET.htm
PHP的反射类ReflectionClass、ReflectionMethod使用实例_php实例_脚本之家.htm
JAVA反射与C#反射之比较 - 孤独游 - 博客频道 - CSDN.NET.htm
JAVA反射与C#反射_神秘猪_新浪博客.htm
学习:java原理—反射机制 - 飞翔荷兰人 - 博客园.htm
转载于:https://www.cnblogs.com/attilax/p/5205991.html
Atitit.跨语言反射api 兼容性提升与增强 java c#。Net php js相关推荐
- atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐) vs lang ...
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面...
Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...
- atitit.跨语言执行cmd cli api的原理及兼容性设计草案
atitit.跨语言执行cmd cli api的原理及兼容性设计草案 1. 标准输入,标准输出,标准错误与重新定向1 2. 常见问题2 2.1. 执行bat文件2 2.2. 执行bat文件 /c ...
- Atitit.跨语言异常转换机制 java c# php到js的异常转换
Atitit.跨语言异常转换机制 java c# php到js的异常转换 1. bizEx 直接抓取,然后js catchEX1 2. Chkec runtimeEx1 3. Other异常..J ...
- java反射api研究_深入研究Java 8中的可选类API
java反射api研究 作为Java程序员,我们所有人都经历了以下情况:我们调用一个方法来获取某个值,然后代替直接对返回值调用某些方法,我们首先必须检查返回值是否不为null,然后在返回值. 这是像G ...
- 跨语言rpc框架Thrift
RPC 全称 Remote Procedure Call--远程过程调用.RPC技术简单说就是为了解决远程调用服务 的一种技术,使得调用者像调用本地服务一样方便透明 Thrift的定义 Thrif ...
- XLORE2:大规模跨语言知识图谱构建与应用
论文地址:XLORE2: Large-scale Cross-lingual Knowledge Graph Construction and Application ABSTRACT XLORE2 ...
- Atitit.提升api兼容性的方法 v3 q326
Atitit.提升api兼容性的方法 v3 q326 1. Atitit.兼容性的"一加三"策略1 2. 2. 扩展表模式1 3. 3. 同时运行模式1 3.1. 3.1. 完美的 ...
- Atitit.rust语言特性 attilax 总结
Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...
最新文章
- J2EE面试题集锦(附答案)
- ide setting
- python当前日期获取程序_Python获取当前时间日期
- 实验4 [BX]和loop指令
- /dev/null 21
- 360浏览器网页走丢了_超酷!Win10 正式版全新 UI 界面,全球第二大浏览器上线...
- “富豪相亲大会”究竟迷失了什么?
- c语言显示数字p1=0x5b,模拟计算器数字输入及显示
- 【合并两个有序的子数组】算法实现
- 2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件
- 这月到手的工资多了没?
- bzoj 2212 Tree Rotations
- 爬虫-抖音无水印视频下载
- Apollo算法阅读之基于Sqp的Referenceline全局参考路线优化(含源码)
- 【第二十篇】Flowable中的任务回退
- 屏蔽csdn百度推广广告
- 吉林省注册公司流程:第一步 企业名称预先核准流程。
- 降噪蓝牙耳机推荐,值得推荐的四款音质好的降噪耳机
- 或许你就是那个背锅侠【多图】
- SmartFoxServer 2X 简介