zoukankan      html  css  js  c++  java
  • java 泛型 入门

    泛型,正如其名称所暗示的,它是一种方法,通过它可以编写出更“泛化”的代码,这些代码对于它们能够作用的类型具有更少的限制,因此单个的代码可以应用到更多的类上。
     
    泛型的主要目的之一就是:用来指定容器要持有什么类型的对象,而且有编译器来保证类型的正确性。
     
    泛型的核心概念:告诉编译器想使用什么类型,然后编译器帮你处理一切细节。
     
    使用泛型类型机制的最吸引人的地方,就是在使用容器类的地方,这些类包括各种List、各种Set、各种Map。如果没有泛型,很容易误将各种类型放入同一个List。
     
    类型参数:
         在类定义时,暂时不指定类型,而是稍后再决定具体使用什么类型;
         在类定义时,用尖括号括住,放在类名后面;
         在使用这个类的时候,用实际的类型代替类型参数。
    例如:
     1 public class Holder<T> { //定义泛型类
     2         private T a ;
     3        
     4         public T getA() {
     5                return a ;
     6        }
     7 
     8         public void setA(T a) {
     9                this.a = a;
    10        }
    11 
    12         public static void main(String[] args) {
    13               Holder<String> h=new Holder<String>();  //应用泛型类
    14               h.setA( "abcd");
    15               
    16               String str=h.getA();
    17               System. out.println(str);
    18               
    19               System. out.println(h.getClass().getName());
    20        }
    21 
    22 }
    
    输出:
    abcd
    edu.shao.generics.Holder
    小结:
    泛型和其他类型差不多,只不过它们碰巧有类型参数罢了:h的类型还是Holder,而不是Holder<String>
    在使用泛型时,我们只需要指定它们的名称和类型参数列表即可。
     
    泛型接口
     1 interface Generator<T>{ //定义泛型接口
     2        T next();
     3 }
     4 
     5 public class Fibonacci implements Generator<Integer>{  //应用泛型接口
     6         private int count =0;
     7 
     8         public Integer next() {
     9                int value=fib(count );
    10                count++;
    11                return value;
    12        }
    13        
    14         private int fib(int n) {
    15                if (n<2) {
    16                       return 1;
    17               }
    18                return fib(n-2)+fib(n-1);
    19        }
    20        
    21         public static void main(String[] args) {
    22               Generator<Integer> generator= new Fibonacci();
    23                for (int i = 0; i < 20; i++) {
    24                      System. out.print(generator.next()+" " );
    25               }
    26        }
    27 }
     
    泛型方法
         定义泛型方法:将泛型参数列表至于返回值之前。
         基本指导原则:无论何时,只要你能做到,就应该尽量使用泛型方法。
         是否拥有泛型方法,与其所在的类是否是泛型没有关系。
     
    例如:
     1 public class GenericMethods {
     2         public static <E> List<E> newList(){
     3                return new ArrayList<E>();
     4        }
     5        
     6         public <T> void printClass(T x){
     7               System. out.println(x.getClass().getName());
     8        }
     9        
    10         public <T,U> void printClasses(T x,U y){
    11               System. out.println(x.getClass().getName()+" "+y.getClass().getName());
    12        }
    13 
    14         public static void main(String[] args) {
    15               GenericMethods genericMethods= new GenericMethods();
    16               
    17               List<Long> longList=GenericMethods. newList();//参数类型推断
    18               
    19               genericMethods.printClass(longList);
    20               genericMethods.printClass(0x123);
    21               
    22               genericMethods.printClasses(123, 123L);
    23               genericMethods.printClasses(1.2, 1.2F);
    24        }
    25 }
    输出:
    java.util.ArrayList
    java.lang.Integer
    java.lang.Integer java.lang.Long
    java.lang.Double java.lang.Float
     
     
  • 相关阅读:
    如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面
    看不懂 ASP.NET 相册上传代码
    asp.net判断是1.1还是2.0主要由Code*属性来解决,判断规则如下:
    引号看不懂
    GridView的行删除事件 //取当前行的Id
    <Columns></Columns>中间的是列集合
    DropDownList1.SelectedIndex = 0 DropDownList1处于位选择任何选项的状态下
    是一个查询语句 查询ZhuanJia表里面id=输入id的数据
    验证码图片的解释
    get和post区别:
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2921914.html
Copyright © 2011-2022 走看看