------- android培训、java培训、期待与您交流! ----------
内省——JavaBean:
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且
方法名符合某种命名规则。
Javabean示例:
class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
JavaBean中属性的名称参考自它的get与set方法。
如代码中的setAge()方法,属性名就为age,规则为:
如果set后的第二个字母是小写,则把第一个字母改为小写;
如setTime-à属性为time
setCPU-à属性名为CPU
//根据JavaBean的属性名称创建PropertyDescriptor对象 PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass()); //获取get方法 Method methodGetX = pd.getReadMethod(); //调用这个get方法 Object retVal = methodGetX.invoke(pt1); System.out.println(retVal); //根据JavaBean的属性名称创建PropertyDescriptor对象 PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, pt1.getClass()); //获取set方法 Method methodSetX = pd.getWriteMethod(); methodSetX.invoke(pt1); System.out.println(pt1.getX());
另一种较为复杂的方式:
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); Object retVal = null; for(PropertyDescriptor pd : pds) { if(pd.getName().equals(propertyName)){ Method methodGetX = pd.getReadMethod(); retVal = methodGetX.invoke(pt1); break; } } return retVal;
-------------------------------------------------------------------------------------------------------------------------
注解:
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以
后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标
记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
@Deprecated
表示该方法已经过时。
@Override
表示该方法是重写方法。
自定注解类:
元注解Retention的三种取值:
RetetionPolicy.SOURCE、
RetetionPolicy.CLASS、
RetetionPolicy.RUNTIME;
分别对应:java源文件-->class文件-->内存中的字节码。
@Target可以定义注解使用的位置。
通过反射来获得注解:
if(AnotationTest.class.isAnnotationPresent(ItcastAnotation.class)){ ItcastAnotation anotation = AnotationTest.class.getAnnotation(ItcastAnotation.class); System.out.println(anotation); }
数组类型的属性:
int [] arrayAttr() default {1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括。
@ItcastAnotation(color="red",value="abc",arrayAtt=1)
枚举类型的属性:
EnumTest.TrafficLamp lamp() ;
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
注解类型的属性:
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”) )
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象,同样的道理,可以认为上面这个
@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma = myAnnotation.annotationAttr();
System.out.println(ma.value());
注解类代码: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface ItcastAnnotation { String color() default "blue"; String value(); int[] arrayAttr() default {3,4,4}; EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED; MetaAnnotation annotationAttr() default @MetaAnnotation("lhm"); }
----------------------------------------------------------------------------------------------------------------------
泛型:
JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器
编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,
getClass()方法的返回值和原始类型完全一样。
整个称为ArrayList<E>泛型类型
ArrayList<E>中的E称为类型变量或类型参数
整个ArrayList<Integer>称为参数化的类型
ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数
ArrayList<Integer>中的<>念着typeof
ArrayList称为原始类型
参数化类型不考虑类型参数的继承关系,如下两种定义方法是错误的:
Vector<String> v = new Vector<Object>();
Vector<Object> v = new Vector<String>();
好处:
1.将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时
问题减少,安全。
2,避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
通常在集合框架中很常见,
只要见到<>就要定义泛型。
其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
只有引用类型才能作为泛型方法的实际参数。
在异常处理时,catch中不能够使用泛型参数,必须明确指定要捕获的异常类型,而throw可以抛出一
个泛型参数化的异常。
泛型类:
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在定义泛型来完成扩展。
//泛型前做法。 class Tool { private Object obj; public void setObject(Object obj) { this.obj = obj; } public Object getObject() { return obj; } } //泛型做法 class Utils<T> { private T q; public void setObject(T q) { this.q = q; } public T getObject() { return q; } }
泛型方法:
泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型
后,所有要操作的类型就已经固定了。为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将
泛型定义在方法上。
传入参数类型不同的情况(将取两种类型的交集):
Number x1 = add(3.5,5); Object x2 = add(3,"abc"); //String x3 = add(3,"abc");错误,当传入的两个类型不一样时,将会取它们的交集类型 public static <T> T add(T x, T y) { return null;
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
public <Q> void print(Q q) { System.out.println("print:"+q); } public static <W> void method(W t) { System.out.println("method:"+t); }
泛型定义在接口上:
//泛型定义在接口上。 interface Inter<T> { void show(T t); } class InterImpl<T> implements Inter<T> { public void show(T t) { System.out.println("show :"+t); } }
泛型限定:
? 通配符。也可以理解为占位符。使用?通配符可以引用其他各种参数化的类型,?通配符定义的
变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
------- android培训、java培训、期待与您交流! ----------
相关推荐
day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
java中泛型说明与应用,有助于更好理解泛型的功能
尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md
Java中的泛型结构请大家指教并指导有不足的地方给予赐教。
泛型使用全集(队_栈_字典_列表_对象列表)
对java1.5中的新特性进行了详细介绍,包括泛型、枚举类型、动态参数、注释、静态包含、格式化、多线程等,都有具体的实例,通俗易懂。
SSH2_自动生成数据库框架整合-泛型引用 数据库是用的是mysql 里面有一个错误 我就先不提示 看看大家能否发现是什么错误,数据库表是不需要建立的 当服务器开启的时候就开始创建表
泛型缓存的使用,泛型类,泛型方法,泛型委托的意义,泛型的使用场景
通常情况下,程序员知道一个特定的list 里边放的是什么类型的数据。但是,这个类型转换是必须的(essential)。编 译器只能保证iterator 返回的是Object 类型。为了保证对Integer 类型变量 赋值的类型安全,必须进行...
Java Generics and Collections 英文版,详细描述java 泛型技术
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
Java基础入门(四)-泛型、反射、注解
Java.SE 自定义泛型与泛型的常见陷阱Java.SE 自定义泛型与泛型的常见陷阱
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
java 泛型接口示例 java 泛型接口示例 java 泛型接口示例