泛型2

来源:互联网 发布:普通网络作家没收入 编辑:程序博客网 时间:2024/05/21 09:34

接口也可以和类一样加入泛型

实现泛型接口的两种方式:

1实现接口的子类使用泛型声明,待实例化使用的时候再传入具体的类型

interface Info<T>{// 在接口上定义泛型public T getVar() ;// 定义抽象方法,抽象方法的返回值就是泛型类型}class InfoImpl<T> implements Info<T>{// 定义泛型接口的子类private T var ;// 定义属性public InfoImpl(T var){// 通过构造方法设置属性内容this.setVar(var) ;}public void setVar(T var){this.var = var ;}public T getVar(){return this.var ;}};public class GenericsDemo24{public static void main(String arsg[]){Info<String> i = null;// 声明接口对象i = new InfoImpl<String>("李兴华") ;// 通过子类实例化对象System.out.println("内容:" + i.getVar()) ;}};


2实现的接口子类不想使用泛型声明,则可以在子类实现接口的时候,直接指定好具体的操作类型即可

interface Info<T>{// 在接口上定义泛型public T getVar() ;// 定义抽象方法,抽象方法的返回值就是泛型类型}class InfoImpl implements Info<String>{// 定义泛型接口的子类private String var ;// 定义属性public InfoImpl(String var){// 通过构造方法设置属性内容this.setVar(var) ;}public void setVar(String var){this.var = var ;}public String getVar(){return this.var ;}};public class GenericsDemo25{public static void main(String arsg[]){Info i = null;// 声明接口对象i = new InfoImpl("李兴华") ;// 通过子类实例化对象System.out.println("内容:" + i.getVar()) ;}};


泛型方法:

泛型方法不一定要在泛型类中定义:

[访问权限] <泛型标志>泛型标志 方法名称([泛型标志 参数名称])

class Demo{public <T> T fun(T t){// 可以接收任意类型的数据return t ;// 直接把参数返回}};public class GenericsDemo26{public static void main(String args[]){Demo d = new Demo();// 实例化Demo对象String str = d.fun("李兴华") ; //传递字符串int i = d.fun(30) ;// 传递数字,自动装箱System.out.println(str) ;// 输出内容System.out.println(i) ;// 输出内容}};


好处:使用泛型统一传入参数的类型

正确例子:

class Info<T>{// 指定上限,只能是数字类型private T var ;// 此类型由外部决定public T getVar(){return this.var ;}public void setVar(T var){this.var = var ;}public String toString(){// 覆写Object类中的toString()方法return this.var.toString() ;}};public class GenericsDemo28{public static void main(String args[]){Info<String> i1 = new Info<String>() ;Info<String> i2 = new Info<String>() ;i1.setVar("HELLO") ;// 设置内容i2.setVar("李兴华") ;// 设置内容add(i1,i2) ;}public static <T> void add(Info<T> i1,Info<T> i2){System.out.println(i1.getVar() + " " + i2.getVar()) ;}};

错误例子


class Info<T>{// 指定上限,只能是数字类型private T var ;// 此类型由外部决定public T getVar(){return this.var ;}public void setVar(T var){this.var = var ;}public String toString(){// 覆写Object类中的toString()方法return this.var.toString() ;}};public class GenericsDemo29{public static void main(String args[]){Info<Integer> i1 = new Info<Integer>() ;Info<String> i2 = new Info<String>() ;i1.setVar(30) ;// 设置内容i2.setVar("李兴华") ;// 设置内容add(i1,i2) ;}public static <T> void add(Info<T> i1,Info<T> i2){System.out.println(i1.getVar() + " " + i2.getVar()) ;}};

泛型数组:感觉可以实现自动封装

public class GenericsDemo30{public static void main(String args[]){Integer i[] = fun1(1,2,3,4,5,6) ;// 返回泛型数组fun2(i) ;}public static <T> T[] fun1(T...arg){// 接收可变参数return arg ;// 返回泛型数组}public static <T> void fun2(T param[]){// 输出System.out.print("接收泛型数组:") ;for(T t:param){System.out.print(t + "、") ;}}};

泛型的嵌套:

泛型也是一种普通的数据类型,也可以随便嵌套


总结:

1泛型在接口上可以定义,以及其使用的方式

2泛型在使用的时候可以进行嵌套的操作,只要根据其操作语法即可

3泛型可以指定其上下限,泛型方法记得要加上泛型标志.





原创粉丝点击