泛型

首先设计一个类,表示一个坐标,坐标由x,y组成,那么坐标有可能是小数,整数,字符串,那么只能使用object类接收3种数据类型。

class Point{
private Object x ;// 表示X坐标
private Object y ;// 表示Y坐标
public void setX(Object x){
this.x = x ;
}
public void setY(Object y){
this.y = y ;
}
public Object getX(){
return this.x ;
}
public Object getY(){
return this.y ;
}
};


public class GenericsDemo01{
public static void main(String args[]){
Point p = new Point() ;// 声明一个Point的对象
p.setX(30) ; // 利用自动装箱操作:int --> Integer --> Object
p.setY(50) ; // 利用自动装箱操作:int --> Integer --> Object

/*

p.setX(30.5) ;// 利用自动装箱操作:float--> Float --> Object
p.setY(50
.3) ;// 利用自动装箱操作:float --> Float --> Object

p.setX("东经120") ;// 利用自动装箱操作:String --> Object
p.setY(
"北纬130") ;// 利用自动装箱操作:String--> Object

p.setX(30.5) ;
p.setY(
"北纬130") ;

*/
int x = (Integer)p.getX() ;// 取出数据先变为Integer,之后自动拆箱
int y = (Integer)p.getY() ;// 取出数据先变为Integer,之后自动拆箱
System.out.println("整数表示,X坐标为:" + x) ;
System.out.println("整数表示,Y坐标为:" + y) ;
}
};

从以上代码可以看出,由于数据类型不统一,可能出现操作不当。

泛型可以解决数据的安全性问题

泛型定义格式如下

【访问权限】class 类名称 <泛型类型1,泛型类型2,.......泛型类型3>{

【访问权限】 泛型类型标识 变量名称;

【访问权限】 泛型类型标识 方法名称{};

【访问权限】 返回值类型声明 方法名称(泛型类型标识 变量名称){};

}

泛型对象定义

类名称 <具体类> 对象名称=new 类名称<具体类>();

则前面代码可以改为

class Point<T>{
private T x ; // 表示X坐标
private T y ; // 表示Y坐标
public void setX(T x){
this.x = x ;
}
public void setY(T y){
this.y = y ;
}
public T getX(){
return this.x ;
}
public T getY(){
return this.y ;
}
};


public class Demo03{
public static void main(String args[]){
Point <String> p = new Point<String>() ;
p.setX("东经180度") ;// String --> Object
p.setY("北纬210度") ;// String --> Object
String x = p.getX() ;// 自动拆箱
String y = p.getY() ;
System.out.println("字符串表示,X坐标为:" + x) ;
System.out.println("字符串表示,Y坐标为:" + y) ;
}
};

如果传入的参数不是String 类型则编译错误。

泛型中也支持通过构造方法实例化对象参数

可以设置多个泛型接收不同类型的对象

class Point<T,V>{
private T x ; // 表示X坐标
private V y ; // 表示Y坐标
public void setX(T x){
this.x = x ;
}
public void setY(V y){
this.y = y ;
}
public T getX(){
return this.x ;
}
public V getY(){
return this.y ;
}
};


public class Demo04{
public static void main(String args[]){
Point <String,int> p = new Point<String,int>() ;
p.setX("东经180度") ;// String --> Object
p.setY(40) ; // String --> Object
System.out.println("字符串表示,X坐标为:" + p.getX()) ;
System.out.println("字符串表示,Y坐标为:" + p.getY()) ;
}
};

泛型对接口的支持

interface Info<T>{}

泛型对方法的支持

public <T> T fun(T t){

return t;

}

泛型的嵌套设计

class Info<T,X>{ // 接收两个泛型类型
private T t ;
private X x ;
public Info(T t,X x){
this.setT(t) ;
this.setX(x) ;
}
public void setT(T t){
this.t = t ;
}
public void setX(X x){
this.x = x ;
}
public T getT(){
return this.t ;
}
public X getX(){
return this.x ;
}
};
class Fun<S>{
private S info ;
public Fun(S info){
this.setInfo(info) ;
}
public void setInfo(S info){
this.info = info ;
}
public S getInfo(){
return this.info ;
}
};
public class Demo06
{
public static void main(String args[]){
Fun<Info<String,Integer>> i1=null;
Info<String,Integer> i2=new Info<String,Integer>("你好",50);
i1=new Fun<Info<String,Integer>>(i2);
System.out.println("内容一:" + i1.getInfo().getT()) ;
System.out.println("内容二:" + i1.getInfo().getX()) ;
}
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值