Java String之泛型的介绍及相关用法

版权声明:转载注明来源。Keep Learning and Coding. https://blog.csdn.net/a771581211/article/details/88384417

首先依旧是定义Point测试类:

package day04;
/**
 * 泛型
 * 泛型又称为参数化类型,是将当前类的属性的类型、方法参数的类型
 * 以及方法返回值的类型的定义权移交给使用者。使用者在创建当前类
 * 的同时将泛型的实际类型传入。
 * @author kaixu
 * 
 * @param <T>
 *
 */
public class Point<T> {
	private T x;
	private T y;
	public Point(T x,T y){
	super();
	this.x = x;
	this.y = y;
	}
	public T getX(){
		return x;
	}
	public void setX(T x){
		this.x = x;
	}
	public T getY(){
		return y;
	}
	public void setY(T y){
		this.x = y;
	}
	
	public String toString(){
		return "("+x+","+y+")";
	}
	

}

之后定义TestPoint类对泛型的功能进行检测:

package day04;

public class TestPoint {

	public static void main(String[] args) {
		Point<Integer>p1 = new Point<Integer>(1,2);
		p1.setX(2);
		int x1= p1.getX();
		System.out.println("x1:"+x1);
		
		Point<Double>p2 = new Point<Double>(1.1,2.2);
		p2.setX(2.2);
		double x2 = p2.getX();
		System.out.println("x2:"+x2);
		
		Point<String> p3 = new Point<String>("一","二");
		p3.setX("二");
		String x3 = p3.getX();
		System.out.println("x3:"+x3);
	}

}

在此基础为了完全证明泛型的原型是Object,再定义TestPoint2类重写相关方法,加深对泛型的理解。

package day04;
/**
 * 泛型的原型是Object,定义了泛型知识编译器在做一些验证工作。
 * 当我们对泛型类型设置值时,会检查是否满足类型要求。
 * 当我们获取一个泛型类型的值时,会自动进行类型转换。
 * @author kaixu
 *
 */
public class TestPoint2 {

	public static void main(String[] args) {
		/*
		 * 这里指定泛型的实际类型为Integer
		 * 但实际上,创建的Point对象中,x,y属性是Object类型
		 * 这里只是应当将它当作Integer看待。
		 */
		Point<Integer> p1 = new Point<Integer>(1,2);
		/*
		 * 由于参数是T,这里会验证实参是否为Integer
		 * 若不是则会编译失败。
		 * 可以传入基本类型,因为还会自动装箱。
		 */
		p1.setX(1);
		/*
		 *获取时,也会进行自动造型。这里无需显示的进行了类型转换。 
		 */
		int x1 = p1.getX();
		
		Point p2 = p1;
		p2.setX("一");
		String x2 = (String)p2.getX();
		System.out.println("x2:"+x2);
		
		//类造型异常!
		x1 = p1.getX();
		System.out.println("x1:"+x1);  //String类型无法造型为Integer类型
		
	}

}

以上。

猜你喜欢

转载自blog.csdn.net/a771581211/article/details/88384417