---------------------- android培训、java培训、期待与您交流! ----------------------1.5新特性:注解
什么是注解:注解就是告诉编译器或开发工具应该怎么做,一个注解就是一个类,用一个注解就相当于创建了类的一个实例对象;加了注解就相当于为程序打上了某种标记,用反射来了解你的类,对你的类采取一些操作,可以加在:类,包,变量等
//注解的反射调用:
首先写一个注解类,然后写一个类调用这个注解类,最后是检查应用了注解类的类
注解上的注解就是元注解
当编译源文件时,会删除一些注解
注解的生命周期:源文件,Class文件,内存中的字节码默认值是Class阶段
为注解增加属性:@ItcastAnnotation(color=”red”,value=”abc”,arrayAttr={1,2,3})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括号;
Public @interface ItcastAnnotation{
}
注解的返回值:原始类型,String类型,Class类型,枚举类型,注解类型,刚才类型的数组
//泛型的学习:
Generic泛型在集合中的应用:ArrayList<String> collection =new ArrayList<String>();
//用了泛型之后,集合中的类型就是特定的了,这样更安全了
取出集合元素之后就不用类型转换了
在反射定义构造方法时:Constructor<String> constructor=String.class.getConstructor();
泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去掉类型信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样,由于编译生成的字节码会去掉泛型类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如:用反射得到的集合,再调用其add方法即可
用反射添加集合元素:collection.getclass().getMethod(“add”,Object.class).invoke(collection,”3”);
ArrayList<E>泛型类型
其中E为类型参数或类型变量
Arraylist<Integer>参数化的类型
Integer为实例类型参数
参数化的类型引用一个原始类型的对象
原始类型也可以引用一个参数化类型的对象
参数化类型不考虑继承关系
泛型的通配符:定义一个方法来说明:接受任意类型参数的参数
Public static void printCollection(Collection<?> collection){//在方法体中不能调用与参数有关的方法}
限定通配符的上边界<?extends Number>
限定通配符的下边界<?super Integer>
HashMap<String,Integer>maps=new HashMap<String ,Integer>();
Maps.put(“zxx”,18);
Maps.put(“zx”,23);
Set<Map.Entry<String,Integer>>map=maps.entrySet();
For(Map.Entry<String,Integer> entry:entrySet){
Entry.getKey();
Entry.getValue();
}只有引用类型作为T
Private static<T>void swap(T[],int I,int j){
T tem=a[i];a[i]=a[j];a[j]=tem;
}
自定义泛型方法:private static<T>T add(T x,T y){
return null;
}
方法练习:
1.把一个对象转换称任意类型:
private static <T> T autoConvert(Object obj){
return (T)obj;
}2.将任意类型数组填充为任意类型对象:
private static <T>void fillArray(T[]a,T obj){
for(int i=0;i<a.length;i++){
a[i]=obj;
}
}3.采用任意参数打印任意类型的集合:
public static <T>void printCollection(Collection<T> collection){
for(Object collection:collections){
System.out.println(collection)
}通配符方法更有效
}4.把集合中的数据安全的复制到相应类型的数组中:
Public static <T> copy1(Collection<T> dest,T[] src){
for(int i=0;i<a.length;i++){
src[i]=dest;
}5.把数组中的数据拷贝到相应类型的数组:
Public static <T> copy1(T[]dest,T[] src){
for(int i=0;i<a.length;i++){
src[i]=dest[i];
}
//参数类型的推断:
当某个类型变量只在么讴歌参数列表中的所有参数
和返回值中只用了一次
当某个类型变量只在么讴歌参数列表中的所有参数
和返回值中用了多次无返回值时取交集,有返回值时考虑返回值。
//泛型类型
数据库访问:从数据库中做增删改查的操作(crud);dao:对对象的增删改查的操作。
Public class GenericDao<T>{
Public <T>void add(T x){}
Public <T>T findById(int id){}
}T随便改成E都行
Public void delete(T obj){}
Public void delete(int id){}
Public void update(T obj){}
Public T findByUserName(String name){ return null }
Public Set<T> findByConditions(String where){return null}
//通过反射获得泛型的实际参数类型:(框架的应用)
Vector<Date>v1=new Vector<Date>();我们转化为得到方法返回的参数类型Method
applyMethod = GenericTest.class.getMethod(“applyVector”,Vector,class);
Public static void applyvector(Vector<Date>v1){}
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima