泛型的应用

  /**
  *  泛型的应用:提供给javac编译器使用的,数组前面不能使用参数类型,其他可以;
  *
  */
 public static void main(String[] args) throws Exception {
  ArrayList lists=new ArrayList(); //集合中可以存放任意类型为原始类型;
  lists.add(1);   //没用泛型有警告
  lists.add(1l);
  lists.add("abc");
  //int i=(Integer)lists.get(1); //因为不知道类型所以转换错误
  
  ArrayList<String> lists2=new ArrayList<String>();//集合中指定类型
  lists2.add("1");  //是泛型警告去除
  lists2.add("1l");
  lists2.add("abc");
  String is=lists2.get(1); //具体类型不需要转换
  
  ArrayList<Integer> lists3=new ArrayList<Integer>();  //类型参数的实例
  System.out.println(lists3.getClass()==lists2.getClass());//是同一份字节码,java jvm不知道是什么类型;
   
  /*
   *  反射:向Integer类型中添加String类型参数  
   */
     //lists3.add("asd");//不知道是什么对象
  lists3.getClass().getMethod("add", Object.class).invoke(lists3, "abc");//invoke(lists3, "abc");向lists3中添加“abc”;
  System.out.println(lists3.get(0));
  
  Collection<String> collection=new Vector(); //参数化与原始类型兼容;
  //Vector<String> ve=new Vector<Object>();  //参数化类型不考虑继承;
  //下面是否正确:?
  Vector v1=new Vector<String>();
  Vector<Object> v2=v1;
  //以上2个都是对的。
  
  printCollection(lists3); //调用printCollection()
  //String.class.asSubclass(Number.class);
  
  Class<?> x;
  Class<String> y = null;
  x=y; 
  //如何打印HashMap中的键值;通过Map.Entry类添加到set集合
  HashMap<String, Integer> map=new HashMap<String, Integer>();
  map.put("a", 1);
  map.put("b", 2);
  map.put("c", 3);
  Set<Map.Entry<String, Integer>> Entryset=map.entrySet();//Map.Entry类通过set集合可以进行迭代;
   for(Map.Entry<String, Integer> entry:Entryset){
    System.out.println(entry.getKey()+":"+entry.getValue());
   }
  
   add(1, 2); //调用add();
   add(2.2, 3); //都是Number类型
   add(2, "yy"); //都是Object类型
   
   awp(new String[]{"asd","ds","a"}, 1, 2);//调用awp();
   Object s="hkl";
   String str=Change(s);//调用Change();
   
   copy(new Vector<String>(), new String[10]);//调用copy()
 }
   /*
    * 泛型的通配符
    */
 public static void printCollection(Collection<?> lists3){ //可以传入任意类型
  //lists3.add(1); //不知道类型无法添加具体类型参数
  System.out.println(lists3.size());
  for(Object s:lists3){
   System.out.println(s);
  }
 }
 /*
  * 自定义泛型方法
  */
 private static <T> T add(T x,T y){ //T为新的任意类型
  return null;
  
 }
 private static <T> void awp(T[]a,int b,int c){ //替换任意类型的数组元素
  T x=a[b];
  a[b]=a[c];
  a[c]=x;
 }
 /*
  * Object转换为任意类型方法
  */
 private static <T> T Change(Object obj){
  return (T)obj; //强转为自定类型
  }
 /*
  * 将数组拷贝到另一个集合
  */
 public static <T> void copy(Collection<T> s,T[] n){
  
   for (int i = 0; i < n.length; i++) {
     s.add(n[i]); //将数组元素添加到集合
   }
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值