泛型详解_1

来源:互联网 发布:核心期刊遴选数据库 编辑:程序博客网 时间:2024/06/05 09:21

java代码

普通泛型:随便命名泛型的类型。

package DAY0114;class Point<T>{     //此处可以随便命名类的名字,与类型。T是type的简称。private T var;  //var是变量,var的类型由T指定。即,由外部指定。public T getVar() { //返回值的类型由外部指定。return var;}public void setVar(T var) {//设置的类型也由外部指定this.var = var;}}public class GenericsDemo01 {public static void main(String args[]){Point<String> point = new Point<String>(); //里面的var变量的类型为String类型point.setVar("it");                        //设置字符串System.out.println(point.getVar());        //取出字符串}}

普通泛型:泛型类型为俩个参数的例子

package DAY0114;class Notepad<K,V> { //此处指定了俩个泛型类型private K key;   //此变量的类型由外部决定private V value; //此变量的类型由外部决定public K getKey() {return key;}public void setKey(K key) {this.key = key;}public V getValue() {return value;}public void setValue(V value) {this.value = value;}}public class GenericsDemo02 {public static void main(String args[]){Notepad<String,Integer> t = null;     //定义俩个泛型类型的对象t = new Notepad<String,Integer>();    //里面的key的类型为string,value的类型为integert.setKey("xiaowng");                  //设置内容t.setValue(20);                       //设置内容System.out.println("name:" + t.getKey());  //取得信息System.out.println("age:" + t.getValue()); //取得信息}}

通配符

package DAY0114;class Info<T>{private T var ; //定义泛型类型public T getVar() {return var;}public void setVar(T var) {this.var = var;}public String toString(){   //直接打印return this.var.toString();}}public class GenericsDemo03 {    public static void main(String args[]){    Info<String> info = new Info<String>();    //使用String为泛型类型    info.setVar("it");                                           //设置内容    fun(info);    }    public static void fun(Info<?> temp){               // 可以接受任意的泛型对象    System.out.println("neirong = " + temp);    }}
受限泛型
package DAY0114;class Info04<T>{private T var;   //定义泛型变量public T getVar() {return var;}public void setVar(T var) {this.var = var;}public String toString(){  //直接打印return this.var.toString();}}public class GenericsDemo04 {public static void main(String args[]){Info04<Integer> info01 = new Info04<Integer>();    //声明Integer的泛型对象Info04<Float> info02 = new Info04<Float>();           //声明Float的泛型对象info01.setVar(30);                                                       //设置整数,自动装箱info02.setVar(30.1f);                                                    //设置小数,自动装箱fun(info01);fun(info02);}public static void fun(Info04<? extends Number> temp){   //只能接受Number以及Number的子类System.out.println(temp + "~");}}
package DAY0114;class Info5<T>{private T var ;   //定义泛型变量public T getVar() {return var;}public void setVar(T var) {this.var = var;}public String toString(){        //直接打印return this.var.toString();}}public class GenericsDemo05 {public static void main(String args[]){Info5<String> info01 = new Info5<String>();      //声明String的泛型对象Info5<Object> info02 = new Info5<Object>();    //声明Object的泛型对象info01.setVar("hello");info02.setVar(new Object());fun(info01);fun(info02);}public static void fun(Info5<? super String> temp){    //只能接受String或Object类型的泛型System.out.println(temp + "~"); }}
泛型无法向上转型

package DAY0114;class Info06<T>{private T var;    //定义泛型变量public T getVar() {return var;}public void setVar(T var) {this.var = var;}public String toString(){         //直接打印return this.var.toString();}}public class GenericsDemo06 {public static void main(String args[]){Info06<String> info01 = new Info06<String>();             //泛型类型为StringInfo06<Object> info02 = null;info02 = info01;                                                               //这句会出错,incompatible types   泛型无法向上转型}}

泛型接口

package DAY0114;interface Info07<T>{        //在接口上定义泛型public T getVar();       //定义抽象方法,抽象方法的返回值就是泛型类型}class Info07Impl<T> implements Info07<T>{      //定义泛型接口的子类private T var;                                                //定义属性public T getVar() {                                         //通过构造方法设置属性内容return this.var;}public void setVar(T var) {this.var = var;}public Info07Impl(T var){//shengchengzhethis.setVar(var);}}public class GenericsDemo07 {public static void main(String args[]){Info07<String> i = null;                            //声明接口对象i = new Info07Impl<String>("tangmu");   //通过子类实例化对象 System.out.println(i.getVar());}}
package DAY0114;interface Info08<T>{                                //在接口上定义泛型public  T getVar();                              //定义抽象方法,抽象方法的返回值就是泛型类型}class Info08Impl implements Info08<String>{       //定义泛型接口的子类@Override   public String getVar() {return this.var;}private String var;                                         //定义属性public String setVar(String var){return this.var = var;}public Info08Impl(String var){                       //通过构造方法设置属性内容this.setVar(var);}}public class GenericsDemo08 {public static void main(String args[]){Info08 i = null;                             //声明接口对象i = new Info08Impl("tangmu");                     //通过子类实例化对象System.out.println(i.getVar());}}
泛型方法

package DAY0114;class Demo09{public <T> T fun09(T t){  //可以接受任意类型的数据return t;                   //直接把参数返回}}public class GenericsDemo09 {public static void main(String args[]){Demo09 demo09 = new Demo09();           //实例化Demo09队形String str = demo09.fun09("tangmu");       //传递字符串Integer i = demo09.fun09(30);                    //传递数字System.out.println("str = " + str + ", i= " + i);    //输出内容}}

泛型数组

package DAY0114;public class GenericsDemo10 {public static <T> T[] fun1(T...arg){        //接受可变参数return arg;                                 //返回泛型类型}public static <T> void fun2(T param[]){                         //输出System.out.println("jieshou fanxing shuzu");for(T t:param){System.out.println(t + "~");}}public static void main(String args[]){Integer[] i = fun1(1,2,3,4,5,6);     //返回泛型数组fun2(i);}}



文章转至:
http://www.cnblogs.com/sunwei2012/archive/2010/10/08/1845938.html

0 0
原创粉丝点击