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
{
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
// 这是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
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
String x2 = point2.getX();
String y2 = point2.getY();
System.out.println(“The point is: ” + “(” + x2 + “, ” + y2 + “)”);
}
}
/*
class “className”
class “className”
泛型可以提供简洁,和安全性;
泛型可以在类的构造方法中使用;
泛型可以擦除:即实例化时不给出T的具体类型;系统将默认按T为Object处理,以确定程序无误!显式指出
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java泛型入门》
本文地址:http://www.xiupu.net/archives-58.html
关注公众号:
微信赞赏
支付宝赞赏