java泛型 null_JAVA泛型详解2 转载

转载地址:http://www.cnblogs.com/sunwei2012/archive/2010/10/08/1845938.html

普通泛型

class Point{ //此处可以随便写标识符号,T是type的简称

private T var ; //var的类型由T指定,即:由外部指定

public T getVar(){ //返回值的类型由外部决定

returnvar ;

}public void setVar(T var){ //设置的类型也由外部决定

this.var =var ;

}

};public classGenericsDemo06{public static voidmain(String args[]){

Point p = new Point() ; //里面的var类型为String类型

p.setVar("it") ; //设置字符串

System.out.println(p.getVar().length()) ; //取得字符串的长度

}

};----------------------------------------------------------

class Notepad{ //此处指定了两个泛型类型

private K key ; //此变量的类型由外部决定

private V value ; //此变量的类型由外部决定

publicK getKey(){return this.key ;

}publicV getValue(){return this.value ;

}public voidsetKey(K key){this.key =key ;

}public voidsetValue(V value){this.value =value ;

}

};public classGenericsDemo09{public static voidmain(String args[]){

Notepad t = null ; //定义两个泛型类型的对象

t = new Notepad() ; //里面的key为String,value为Integer

t.setKey("汤姆") ; //设置第一个内容

t.setValue(20) ; //设置第二个内容

System.out.print("姓名;" + t.getKey()) ; //取得信息

System.out.print(",年龄;" + t.getValue()) ; //取得信息

}

};

通配符

class Info{private T var ; //定义泛型变量

public voidsetVar(T var){this.var =var ;

}publicT getVar(){return this.var ;

}public String toString(){ //直接打印

return this.var.toString() ;

}

};public classGenericsDemo14{public static voidmain(String args[]){

Info i = new Info() ; //使用String为泛型类型

i.setVar("it") ; //设置内容

fun(i) ;

}public static void fun(Info> temp){ //可以接收任意的泛型对象

System.out.println("内容:" +temp) ;

}

};

受限泛型

class Info{private T var ; //定义泛型变量

public voidsetVar(T var){this.var =var ;

}publicT getVar(){return this.var ;

}public String toString(){ //直接打印

return this.var.toString() ;

}

};public classGenericsDemo17{public static voidmain(String args[]){

Info i1 = new Info() ; //声明Integer的泛型对象

Info i2 = new Info() ; //声明Float的泛型对象

i1.setVar(30) ; //设置整数,自动装箱

i2.setVar(30.1f) ; //设置小数,自动装箱

fun(i1) ;

fun(i2) ;

}public static void fun(Info extends Number> temp){ //只能接收Number及其Number的子类

System.out.print(temp + "、") ;

}

};----------------------------------------------------------

class Info{private T var ; //定义泛型变量

public voidsetVar(T var){this.var =var ;

}publicT getVar(){return this.var ;

}public String toString(){ //直接打印

return this.var.toString() ;

}

};public classGenericsDemo21{public static voidmain(String args[]){

Info i1 = new Info() ; //声明String的泛型对象

Info i2 = new Info() ; //声明Object的泛型对象

i1.setVar("hello") ;

i2.setVar(newObject()) ;

fun(i1) ;

fun(i2) ;

}public static void fun(Info super String> temp){ //只能接收String或Object类型的泛型

System.out.print(temp + "、") ;

}

};

泛型无法向上转型

class Info{private T var ; //定义泛型变量

public voidsetVar(T var){this.var =var ;

}publicT getVar(){return this.var ;

}public String toString(){ //直接打印

return this.var.toString() ;

}

};public classGenericsDemo23{public static voidmain(String args[]){

Info i1 = new Info() ; //泛型类型为String

Info i2 = null;

i2= i1 ; //这句会出错 incompatible types

}

};

泛型接口

interface Info{ //在接口上定义泛型

public T getVar() ; //定义抽象方法,抽象方法的返回值就是泛型类型

}class InfoImpl implements Info{ //定义泛型接口的子类

private T var ; //定义属性

public InfoImpl(T var){ //通过构造方法设置属性内容

this.setVar(var) ;

}public voidsetVar(T var){this.var =var ;

}publicT getVar(){return this.var ;

}

};public classGenericsDemo24{public static voidmain(String arsg[]){

Info i = null; //声明接口对象

i = new InfoImpl("汤姆") ; //通过子类实例化对象

System.out.println("内容:" +i.getVar()) ;

}

};----------------------------------------------------------

interface Info{ //在接口上定义泛型

public T getVar() ; //定义抽象方法,抽象方法的返回值就是泛型类型

}class InfoImpl implements Info{ //定义泛型接口的子类

private String var ; //定义属性

public InfoImpl(String var){ //通过构造方法设置属性内容

this.setVar(var) ;

}public voidsetVar(String var){this.var =var ;

}publicString getVar(){return this.var ;

}

};public classGenericsDemo25{public static voidmain(String arsg[]){

Info i= null; //声明接口对象

i = new InfoImpl("汤姆") ; //通过子类实例化对象

System.out.println("内容:" +i.getVar()) ;

}

};

泛型方法

classDemo{public T fun(T t){ //可以接收任意类型的数据

return t ; //直接把参数返回

}

};public classGenericsDemo26{public static voidmain(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{ //指定上限,只能是数字类型

private T var ; //此类型由外部决定

publicT getVar(){return this.var ;

}public voidsetVar(T var){this.var =var ;

}public String toString(){ //覆写Object类中的toString()方法

return this.var.toString() ;

}

};public classGenericsDemo27{public static voidmain(String args[]){

Info i = fun(30) ;

System.out.println(i.getVar()) ;

}public static Info fun(T param){//方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定

Info temp = new Info() ; //根据传入的数据类型实例化Info

temp.setVar(param) ; //将传递的内容设置到Info对象的var属性之中

return temp ; //返回实例化对象

}

};

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

class Info{ //指定上限,只能是数字类型

private T var ; //此类型由外部决定

publicT getVar(){return this.var ;

}public voidsetVar(T var){this.var =var ;

}public String toString(){ //覆写Object类中的toString()方法

return this.var.toString() ;

}

};public classGenericsDemo28{public static voidmain(String args[]){

Info i1 = new Info() ;

Info i2 = new Info() ;

i1.setVar("HELLO") ; //设置内容

i2.setVar("汤姆") ; //设置内容

add(i1,i2) ;

}public static void add(Info i1,Infoi2){

System.out.println(i1.getVar()+ " " +i2.getVar()) ;

}

};

泛型数组

public classGenericsDemo30{public static voidmain(String args[]){

Integer i[]= fun1(1,2,3,4,5,6) ; //返回泛型数组

fun2(i) ;

}public static T[] fun1(T...arg){ //接收可变参数

return arg ; //返回泛型数组

}public static void fun2(T param[]){ //输出

System.out.print("接收泛型数组:") ;for(T t:param){

System.out.print(t+ "、") ;

}

}

};

泛型的嵌套设置

class Info{ //接收两个泛型类型

privateT var ;privateV value ;publicInfo(T var,V value){this.setVar(var) ;this.setValue(value) ;

}public voidsetVar(T var){this.var =var ;

}public voidsetValue(V value){this.value =value ;

}publicT getVar(){return this.var ;

}publicV getValue(){return this.value ;

}

};class Demo{privateS info ;publicDemo(S info){this.setInfo(info) ;

}public voidsetInfo(S info){this.info =info ;

}publicS getInfo(){return this.info ;

}

};public classGenericsDemo31{public static voidmain(String args[]){

Demo> d = null ; //将Info作为Demo的泛型类型

Info i = null ; //Info指定两个泛型类型

i = new Info("汤姆",30) ; //实例化Info对象

d = new Demo>(i) ; //在Demo类中设置Info类的对象

System.out.println("内容一:" +d.getInfo().getVar()) ;

System.out.println("内容二:" +d.getInfo().getValue()) ;

}

};

泛型方法不一定要通过参数来确定泛型准确类型,可以只通过返回值,比如:

public static ArrayList newArrayList() {

return new ArrayList();

}

public List queryHistories(Long skyid,PrepaidHistoryType type, Date from, Date end) {

。。。

return Lists.newArrayList();

}

这样Lists.newArrayList();

智能的知道返回类型为PrepaidHistory

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值