predicate接口,funcition接口,stream流,反射和注解

Predicate接口
用来判断条件是否成立
抽象方法:test(T t)根据参数执行判断
默认方法:and,将两个条件连接起来判断
or,或有true则true
negate,取反
Function
用来将换数据类型
抽象方法:R apply(T t),将t的类型从T转换为R
默认方法:andThen组合操作,后面是在前面基础上完成的
Stream流
更方便的对数组和集合进行操作
Stream流的获取操作
* 单列集合流的获取方式:调用集合对象的stream方法即可获取流对象(list.stream)
* 双列集合流的获取方式:
Stream keyStream = map.keySet().stream();//获得键对应的流对象
Stream valueStream = map.values().stream();//获得值对应的流对象
Stream

28.3_反射之操作构造方法

Constructor类概述
* 类中的每一个构造方法都是一个Constructor类的对象。
* 反射操作构造方法就是要获得对应的Constructor对象来创建类的对象
Class类中与Constructor相关的方法(无参构造不用传参,有参的传数据类型.class)
1. Constructor getConstructor(Class… parameterTypes) * 根据参数类型获得对应的构造方法对象,只能获取public修饰的
2. Constructor getDeclaredConstructor(Class… parameterTypes) * 根据参数类型获得对应的构造方法对象, 包括的private修饰的
3. Constructor[] getConstructors() * 获得类所有的构造方法对象,只能获取public的
4. Constructor[] getDeclaredConstructors() * 获得类所有的构造方法对象,包括的private修饰的
Constructor对象常用方法
1. T newInstance(Object… initargs) * 根据参数(自己传入的参数)创建类的对象
2. void setAccessible(true) * 设置是否取消权限检查(暴力反射) * true:取消权限检查,不检查权限 * false: 要检查取消
步骤:1.创建class对象;2.根据class对象创建constructor对象3.根据con创建类对象

28.4_反射之操作成员方法

Method类概述
* 类中的每一个成员方法都是一个Method类的对象。
* 反射操作成员方法就是要获得对应的Method对象来调用成员方法
Class类中与Method相关的方法(无参方法只需要传方法名,有参的参数数据类型.class)
* Method getMethod(String name,Class…types)
根据方法名和参数类型获得成员方法对象,只能获取public修饰的
* Method getDeclaredMethod(String name,Class…types)
根据方法名和参数类型获得成员方法对象,包括private修饰的
* Method[] getMethods()
获得类所有的成员方法对象,返回数组,只能获得public,包括父类
* Method[] getDeclaredMethods()
获得类所有的成员方法对象,返回数组,包括private修饰的,不包括父类
Method对象常用方法
* 1. Object invoke(Object obj, Object… args)
调用方法 obj:调用方法(他的类调用这个方法)的对象 args:传递给方法里面的参数
* 2. void setAccessible(boolean flag)
设置是否取消权限检查(暴力反射) true:取消权限检查.不检查权限false:要检查取消

28.5_反射之操作成员变量

Field类概述
* 类中的每一个成员变量都是一个Field类的对象。
* 反射操作成员变量就是要获得对应的Field对象给成员变量赋值和取值。
Class类中与Field相关的方法
* String getName();获取成员变量名称
* Field getField(String name);
根据成员变量名获得对应的Field对象,只能获取public修饰的
* Field getDeclaredField(String name);
根据成员变量名获得对应的Field对象,包括private修饰
* Field[] getFields();
获得类中所有的成员变量对象,返回数组,只能获取public修饰的
* Field[] getDeclaredFields()
获得类中所有的成员变量对象,返回数组,包括private修饰
Field对象常用方法 参数为该类对象,想要改成的结果
void set(Object obj, Object value)
void setInt(Object obj, int i)
Object get(Object obj)
int getInt(Object obj)
void setAccessible(true);暴力反射,设置为可以直接访问私有类型的属性。
Class getType(); 获取属性的类型,返回Class对象
注解
* 注解相当一种标记,是类的组成部分,可以给类携带一些额外的信息。
* 标记(注解)可以加在包,类,字段,方法,方法参数以及局部变量上。
注解的定义格式:
@interface 注解名{
// 定义属性
}
属性定义格式
* 格式1:数据类型 属性名();
* 格式2:数据类型 属性名() default 默认值;
属性适用的数据类型
* 八种基本数据类型:byte,short,int,long,float,double,char,boolean
* String,Class,枚举类型,注解
* 以上数据类型的数组形式
注解使用注意事项
* 如果属性有默认值,则使用注解的时候,这个属性可以不用赋值。
* 如果属性没有默认值,那么在使用注解时一定要给属性赋值。
特殊属性:value
* 如果注解中只有一个属性且名字为value时,则在使用注解给属性赋值时可以省略属性名value。
* 如果注解中除了value属性之外还有其他属性且没有默认值,则在给属性赋值时value属性名也不能省略。
须知:如果注解中刚好只有一个属性时,一般属性名就命名为value。

28.6_注解之元注解

元注解概述
* 官方定义的注解
* 用来定义注解的注解(给注解做解释)。
* 官方所有非元注解的定义都使用到了元注解
常用的元注解
* @Target
* @Retention
* @Inherited:用来标明该注解可以被子类继承
元注解之@Target
* 用来说明注解的作用位置(成员变量,成员方法,构造方法,类….),
如果没有使用该元注解说明则默认可以使用在任意位置
* 可使用的值定义在ElmentType枚举类中,常用值如下:
TYPE, 可以使用在类,接口上
FIELD, 可以使用在成员变量上(字段)
METHOD, 可以使用在成员方法上
CONSTRUCTOR, 可以使用在构造方法上
PARAMETER, 可以使用在方法参数上
LOCAL_VARIABLE, 可以使用局部变量上
例: @Target({ElementType.METHOD,ElementType.TYPE})作用在类和成员方法上
元注解之@Retention
* 用来说明注解的有效范围(生命周期)
* 可使用的值定义在RetentionPolicy枚举类中,常用值如下:
SOURCE: 源代码阶段 编译生成的class文件和运行过程中就不存在了。
CLASS: 字节码阶段 存在源代码阶段,字节码阶段,运行阶段不存在了。
RUNTIME:运行阶段, 存在三个阶段。
例: @Retention(RetentionPolicy.RUNTIME)有效范围是运行阶段
注解解析
创建方法做注解解析,该方法必须是非静态的方法
什么是注解解析
* 通过Java技术获得注解属性信息的过程则称为注解解析。
与注解解析相关的类和接口
* Annotation:类 所有自定义注解都是该类的子类。
* AnnotatedElement:接口 该接口中定义了与获得注解信息的相关方法。
T getAnnotation(注解名.class) * 获得当前对象上使用的指定类型的注解
T getDeclaredAnnotation(注解名.class) * 获得当前对象上使用的指定类型的注解
Annotation[] getAnnotations() * 获得当前对象上使用的所有注解,包括父类的
Annotation[] getDeclaredAnnotations() * 获得当前对象上使用的所有注解,不包括父类的
boolean isAnnotationPresent(Class annotationClass) * 判断当前对象上是否使用了指定类型的注解,如果使用了返回true,否则false
注解解析的原理
* 注解作用在哪个成员上就获得该成员对应的对象来获取注解信息。
* 比如:注解作用在成员方法上,则获得该成员方法对应的Method对象
* 比如:注解作用在类上,则获得该类对应的Class对象
* 比如:注解作用在构造方法上,则获得该构造方法对应的Constructor对象
* 比如:注解作用在成员变量上,则获得该成员变量对应的Field对象 Class/Method/Constructor/Field等类都实现了AnnotatedElement接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值