版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java泛型与反射在开发中应用概述Java泛型与反射在开发中应用概述Java泛型Java反射123Java泛型与反射在开发中应用概述Java泛型Java反射123Java泛型与反射在开发中应用概述泛型和反射都是我们在工作中常用的Java特性本PPT总结了常用的方式,说明了部分实现原理Java泛型与反射在开发中应用概述Java泛型Java反射123Java泛型与反射在开发中应用泛型概念基本元素实现原理通配符项目中的使用Java泛型与反射在开发中应用泛型程序设计语言的一种特性。在强类型语言中,定义一些可变部分,那些部分在使用前作出指明。支持泛型的语言:C++,Java,C#,Visua,Delphi…Java泛型与反射在开发中应用JAVA泛型引入泛型JAVASE1.5提高代码的重用率实现类型参数化基本构成类型参数泛型接口泛型方法泛型类Java泛型与反射在开发中应用类型参数Class<T><T>声明一个类型持有者名称成员、参数和返回值类型。Java泛型与反射在开发中应用泛型类使用了泛型的类class创建类对象时,指明具体的类型根据需求返回不同的类型Java泛型与反射在开发中应用泛型接口工厂模式Java泛型与反射在开发中应用泛型方法方法独立于类而产生变化。影响范围小,可以用于static方法。Java泛型与反射在开发中应用泛型方法的特点泛型类需要在创建对象时指定类型参数的值,泛型方法通常不必指明参数类型。编译器会推断出具体的类型Java泛型与反射在开发中应用JAVA泛型方法一个工具类虽然Java7中已经优化了这个部分。但这个工具类可以简化我们当前的一部分工作Java泛型与反射在开发中应用JAVA泛型泛型的好处代码的复用减少类型转换对比使用泛型和没有使用泛型的代码Java泛型与反射在开发中应用JAVA泛型使用泛型可以使List变成能容纳各种类型的容器不需要进行取得数值的类型转换Java泛型与反射在开发中应用JAVA泛型Java泛型与反射在开发中应用泛型原理Java泛型是在编译器的层面上实现的在编译后,通过擦除,将泛型的痕迹全部抹去。擦除:将任何具体的类型信息都消除,唯一知道的就是正在使用一个对象Java泛型与反射在开发中应用擦除JVM不知道泛型的存在向上兼容。Java泛型与反射在开发中应用擦除Java重用了extends关键字classGeneric<TextendsNumber>extends可以将参数限制为某个类型的子集Java泛型与反射在开发中应用擦除Java泛型与反射在开发中应用擦除反编译之后的结果Java泛型与反射在开发中应用擦除擦除产生在我们声明泛型时classTest<TextendsRole>{}public<TextendsRole>voidf(Tt){};在泛型参数中,也可以限定类型List<?>aList;Java泛型与反射在开发中应用通配符使用通配符和super,extends关键字来限定需要的类型super,extends都是通过重载实现的Java泛型与反射在开发中应用通配符-协变一个简单的对比:Java泛型与反射在开发中应用通配符-协变与数组不同的是,泛型没有内建的协变类型。数组在语言中是完全定义的,因此可以内建了编译期和运行时的检查。在使用泛型时,编译期和运行时系统都不知道你想用类型做什么,以及应该采用什么样的规则。Java泛型与反射在开发中应用通配符通配符:<?>我们可以通过使用通配符更加细致的描述所需泛型的类型可以使用的方式:<?><?extendsRole><?superRole>Java泛型与反射在开发中应用通配符<?>通配符类型表现的类型是未知的,不是Object,是不知道什么类型。<?extendsNumber>表示类型的上界,表示参数化类型的可能是Number
或是
Number的子类<?superNumber>表示类型下界(Java
Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至ObjectJava泛型与反射在开发中应用通配符两个极端:List<?extendsRole>和List<?superRole><?extendRole>·List<?
extends
Role>
表示
“具有任何从Role继承类型的列表”,编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。可以添加null,因为null
可以表示任何类型。·所以List
的add
方法不能添加任何有意义的元素,但是可以接受现有的子类型List<Pet>
赋值。Java泛型与反射在开发中应用通配符<?superRole>List<?
super
Role>
表示“具有任何Role超类型的列表”,列表的类型至少是一个
Role
类型,因此可以安全的向其中添加Role
及其子类型。由于List<?
super
Role>中的类型可能是任何Role
的超类型,无法赋值为Role的子类型Human的List<Human>.Java泛型与反射在开发中应用通配符Java泛型与反射在开发中应用对比Java泛型与反射在开发中应用我们用到的泛型容器类List<T>Map<K,V>工厂模式使用泛型接口建立工厂观察者模式使用带有泛型的监听器注册到观察者中在调用fireEvent时就可以使用具体的类型处理事件Java泛型与反射在开发中应用JAVA泛型容易遇到的问题方法声明基本类型Java泛型与反射在开发中应用JAVA泛型支持的不足协变newT()JAVA对泛型的补偿反射Java泛型与反射在开发中应用泛型部分——完休息,休息一会儿Z..z..z..z..Java泛型与反射在开发中应用概述第一部分:泛型第二部分:反射123Java泛型与反射在开发中应用反射概述反射的基本内容关于Class反射的安全性反射的应用Java泛型与反射在开发中应用反射机制反射的概念程序集包含模块,而模块包含类型,类型又包含成员。反射提供了封装程序集、模块和类型的对象。反射可以动态地创建类型的实例,类型绑定到现有对象,从现有对象中获取类型。可以调用类型的方法或访问其字段和属性。模块类型成员Java泛型与反射在开发中应用JAVA的反射反射-Reflection是JAVA语言在运行时拥有一项自观的能力。可以在运行期载入、探知、使用编译期完全未知的类Java泛型与反射在开发中应用基本内容PackageClassFieldMethodConstructorJava泛型与反射在开发中应用类结构Java泛型与反射在开发中应用Class主要接口TypeJava编程语言中所有类型的公共高级接口GenericDeclaration一个给所有声明了类型变量(<T>)的实体的接口AnnotatedElement该接口允许反射性地读取注释。可以通过接口提供的方法获取这个元素(Class)内的所有注释Java泛型与反射在开发中应用Class创建Class只有一个私有的构造方法,因此,我们在程序中无法创建Class对象我们从对象中获取的Class对象都是由JVM产生的。数组也会有自己的Class对象Java泛型与反射在开发中应用Class的获取Stringstr="abc";Classc1=str.getClass();Classc1=str.getSuperClass();Class.forName("java.lang.String");Class.forName(“[S");Classc1=String.class;Classc1=Boolean.TYPE;Java泛型与反射在开发中应用Class常用属性modifiergetModifiers();获取class(methods和fields)的属性public/static/final…InnerclassgetDeclaredClasses()获取内部类OutclassgetDeclaringClass()获取内部类的外部类Java泛型与反射在开发中应用Class的Member们Constructor构造方法getDeclaredConstructors()所有的Public/Private的构造方法可以全部得到getConstructors()只有公共构造方法Field成员变量getDeclaredFields()Method成员方法getDeclaredMethods()Java泛型与反射在开发中应用Class的泛型在J2SE1.5之后,Class也支持类型变量<T>我们可以通过调用方法来获取泛型信息getTypeParameters()getGenericSuperclass()getGenericInterfaces()Java泛型与反射在开发中应用Member类图Java泛型与反射在开发中应用Constructor提供构造方法的基本信息getParameterTypes()getModifiers()可以通过newInstances()创建对象newInstance(Object…)Class.newInstance()是通过Construcor实现的Java泛型与反射在开发中应用Field提供字段的信息,可能是一个静态的字段getType()get(Objectobj)可以修改字段内的内容set(Objectobj,Objectval)Java泛型与反射在开发中应用Method提供方法的基本信息getTypeParameters()getReturnType()可以执行某个对象的该方法invok(Objectobj,Object…param)Java泛型与反射在开发中应用Array提供了动态创建数组,以及访问数组元素的静态方法。Array.newInstance(Class,size);Array.set(obj,index,val);Array.get(obj,index);Java泛型与反射在开发中应用反射的安全性反射经常由框架型代码使用,由于这一点,我们可能希望框架能够全面接入代码,无需考虑常规的接入限制。但是,在其它情况下,不受控制的接入会带来严重的安全性风险,例如当代码在不值得信任的代码共享的环境中运行时。Java编程语言定义一种多级别方法来处理反射的安全性。Java泛型与反射在开发中应用反射的安全性实施与应用于源代码接入相同的限制从任意位置到类公共组件(public)的接入类自身外部无任何到私有组件(private)的接入受保护(protected)和打包(缺省接入)组件的有限接入但是……Java泛型与反射在开发中应用AccessibleObject子类:Constructor,Field,Method提供了将反射的对象标记为在使用时取消默认Java语言访问控制检查的能力。setAccessible(booleanflag)Java泛型与反射在开发中应用反射的安全性setAccessible(),我们可以通过这个方法打开/关闭对某个方法/变量的可访问性。深入研究牵扯到JAVA的安全管理器,这里只举个简单的例子。Java泛型与反射在开发中应用反射的安全性我们可以通过修改modifier来修改变量的属性。比如修改privatestaticfinalFIELD;Java泛型与反射在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东科贸职业学院《生理药理学》2023-2024学年第一学期期末试卷
- 广东警官学院《文学批评方法》2023-2024学年第一学期期末试卷
- 广东江门中医药职业学院《智能运输系统概论》2023-2024学年第一学期期末试卷
- 广东技术师范大学《金融企业会计》2023-2024学年第一学期期末试卷
- 广东海洋大学《机械工程技术交流》2023-2024学年第一学期期末试卷
- 广东工商职业技术大学《机器学习原理》2023-2024学年第一学期期末试卷
- 广东第二师范学院《生物药物制剂技术》2023-2024学年第一学期期末试卷
- 广东潮州卫生健康职业学院《城市绿地规划》2023-2024学年第一学期期末试卷
- 广东财经大学《建筑设计(Ⅱ)》2023-2024学年第一学期期末试卷
- 《国际肿瘤护理进展》课件
- 物质与意识的辩证关系
- 小学英语考试教师总结反思8篇
- (高清版)DZT 0322-2018 钒矿地质勘查规范
- SJ-T 11798-2022 锂离子电池和电池组生产安全要求
- 多智能体仿真支撑技术、组织与AI算法研究
- 2023年中考语文二轮复习:词意表达 真题练习题汇编(含答案解析)
- 安全管理中人因素
- 铜矿的选矿工艺与设备选择
- 餐厅年度总结计划
- 83广东省深圳市宝安区2023-2024学年六年级上学期期末数学试卷
- 陕西省渭南市2023-2024学年高一上学期1月期末数学试题
评论
0/150
提交评论