Java泛型入门

 

问题: 要求设计一个坐标类:(x,y), 可以同时满足三种类型的数据:
1. int型,x=10,y=100;
2. float型,x = 10.3, y = 50.2;
3. String型,x = “东经180度”,y= “北纬210度”;
分析:
这个类可以同时处理三种数据类型,为保证程序的正确性,最好采用Object类完成,因为Object可以接收任意的引用数据类型;
原理:
数字—–》自动装箱成为包装类———-》为object类接收;
String—》 Object类接收;

jdk1.5之前:如下实现:

package com.mldn;

 

class Point

{

private Object x; // 用Object 去接收所有的数据类型

private Object y;

 

// 现实现int型:

public Point(Object x, Object y)

{

this.x = x; // 设置坐标

this.y = y;

}

 

public Object getX() // yong Object accept the return

{

return this.x;

}

 

public Object getY()

{

return this.y;

}

}

 

public class PointDemo

{

public static void main(String[] args)

{

int ix = 10;

int iy = 502;

Point point = new Point(ix, iy); // int–> Integer –> Object

// 这是jdk1.5前

int x = (Integer)point.getX(); // 存在不安全因素,因为Object的转型

int y = (Integer)point.getY(); // 可以是任意类型;

System.out.println(“The point is: ” + “(” + x + “, ” + y + “)”);

 

float fx = 10.3f;

float fy = 50.2f;

Point point1 = new Point(fx, fy);

 

float x1 = (Float)point1.getX();

float y1 = (Float)point1.getY();

System.out.println(“The point is: ” + “(” + x1 + “, ” + y1 + “)”);

 

String sx = “东经180度”;

String sy = “北纬21度”;

Point point2 = new Point(sx, sy);

 

String x2 = (String)point2.getX();

String y2 = (String)point2.getY();

System.out.println(“The point is: ” + “(” + x2 + “, ” + y2 + “)”);

}

}

————————jdk1.5后,出现了泛型;

package com.mldn;

 

class Point // T 是一个任意类型,在类实例化时才确定!

{

private T x; // 用T 去接收所有的数据类型

private T y;

 

// 现实现int型:

public Point(T x, T y)

{

this.x = x; // 设置坐标

this.y = y;

}

 

public T getX() // yong T accept the return

{

return this.x;

}

 

public T getY()

{

return this.y;

}

}

 

public class PointDemo

{

public static void main(String[] args)

{

int ix = 10;

int iy = 502; // 实例化时确定属性的类型,这样具有实时的类型安全性;

Point point = new Point(ix, iy); // T–> Integer

// 这是jdk1.5后

int x = point.getX(); // 不再用转型

int y = point.getY(); //

System.out.println(“The point is: ” + “(” + x + “, ” + y + “)”);

 

float fx = 10.3f;

float fy = 50.2f;

Point point1 = new Point(fx, fy); // 泛型擦除的无警告格式,T–>Object

 

float x1 = (Float)point1.getX(); // 和不用泛型一样,需要向下转型;

float y1 = (Float)point1.getY();

System.out.println(“The point is: ” + “(” + x1 + “, ” + y1 + “)”);

 

String sx = “东经180度”;

String sy = “北纬21度”;

Point point2 = new Point(sx, sy);

 

String x2 = point2.getX();

String y2 = point2.getY();

System.out.println(“The point is: ” + “(” + x2 + “, ” + y2 + “)”);

 

}

}

/*

class “className” , T 是一个类类型; 也可以有任意多个T,

class “className”,

泛型可以提供简洁,和安全性;

泛型可以在类的构造方法中使用;

泛型可以擦除:即实例化时不给出T的具体类型;系统将默认按T为Object处理,以确定程序无误!显式指出可以避免警告信息;但这不常用;

 

 

*/

 

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java泛型入门
本文地址:http://www.xiupu.net/archives-58.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!