黑马程序员--学习--注解和泛型

---------------------- android培训java培训、期待与您交流! ----------------------

注解:

相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,javac编译器,开发工具
和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。
标记加在包,类,字段,方法,方法的参数以及局部变量上
增加注解属性
@Target({ElementType.METHOD,ElementType.TYPE})


泛型
参数化类型与原始类型的兼容性
参数化类型可以引用一个原始类型的对象,编译报告警告
Collection<String> c = new Vector();
原始类型可以引用一个参数化类型的对象,编译报告警告
Collection c = new Vector<String>();

参数化类型不考虑类型参数的继承关系
Vector<String> v = new Vector<Object>();//错误

Vector<Object> v = new Vector<String>();//错误

?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法

泛型实例
HashMap<String,Integer> maps = new HashMap<String,Integer>();
maps.put("dd",20);
maps.put("ddf",23);
Set<Map.Entry<String,Integer>> entrySet = maps.entrySet();
for(Map.Entry<String,Integer> entry: entrySet){
 System.out.println(entry.getKey()+":"+entry.getValue());
}

只有引用类型才能作为泛型的参数  //swap(new int[3],3,5)会报错

类型参数的类型推断
根据调用泛型方法时实际传递的参数类型或返回值的类型来推断,具体规则如下
1.当某个类型变量只在整个参数列表中的所有参数和返回值中的一处别应用了, 那么根据调用方法时该处
的实际应用类型来确定
swap(new String[3],3,4)----statice<E> void swap(E[]a,int i,int j)
2.当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用如果调用方法时这多处的实际应用类型
对应同一种类型来确定
add(3,5)---static<T> T add<T a,T b>
3.当某个类型变量在整个参数列表中的所有参数和返回值中的多处别应用了,如果调用方法时这多处的实际
应用类型对应到了不同的类型,且没有使用返回值,这时候取多个参数中的最大交集类型
fill(new Integer[3],3.4f)----static <T> void fill(T[]a,T v)
4.当某个类型变量在整个参数列表中的所有参数和返回值中的多处别应用了,如果调用方法时这多处的实际
应用类型对应到了不同的类型,且使用返回值,这时候优先考虑返回值的类型
int x = (3,3.5f) ----static <T> add(T a,T b)
5.参数类型的类型推断具有传递性,下面第一种情况推断实际参数类型为Object,编译没有问题,而第二种情况则
根据参数化的Vector类实例将类型变量直接确定为String类型,编译将出现问题
copy(new Integer[5],new String[5])---------static<T> void copy(T[] a,T[] b);
copy(new Vector<String>(),new Integer[5] )----static<T> void <T> copy(Collection<T> a, T[] b);

 

/*

public class{
 public static void  main(String[] args){  
 Method applyMethod = GnericText.class.getMethod("applyVector",Vector.class);
 Type[] types = applyMethod.getGenericParameterTypes();     
 ParameterizedType pType = (ParameterizedType)types[0];                                        ????
 System.out.println(pType.geActualTypeArguments()[0]);

 public static void applyVector(Vector<Date> v1){


 }
 }
}

copy(new Vector<String>(),new Vector<Date>())                                         ?????

*/

 

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭