黑马程序员之注解与泛型

 

---------------------- 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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值