Java——泛型

Java数据类型(type)可以分为两大类:基本类型(直接包含值)和引用类型(引用对象)

基本数据类型:

   numeric:byte、short、int、long、char
   floating-point:float、double、boolean

引用类型:class interface array null


引入:

  在引入范型之前,要在类中的方法支持多个数据类型,就需要对方法进行重载,在引入范型后,可以解决此问题(多态),更进一步可以定义多个参数以及返回值之间的关系。

例如
public void write(Integer i, Integer[] ia);
public void write(Double  d, Double[] da);
的范型版本为
public <T> void write(T t, T[] ta);

命名:

 * 定义的泛型类,特点是类名后有<T> 
 * T:可以是任意大写字母,
 * 一般:
 *  E — Element,常用在java Collection里,如:List<E>,Iterator<E>,Set<E>
 *  K,V — Key,Value,代表Map的键值对
 *  N — Number,数字
 *  T — Type,类型,如String,Integer等等


一、demo1:创建不同类型的点并输出

定义一个点:

public class Point<T> {
	private T x;
	private T y;

	public Point() {
	}
	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.y = y;
	}
	
	@Override
	public String toString() {
		return "Point [x=" + x + ", y=" + y + "]";
	}
}

public class PointTRun {

	public static void main(String[] args) {
		Point<Integer> p = new Point<Integer>();
		p.setX(new Integer(1));
		System.out.println(p.getX() + "  " + p.getY());

		System.out.println();
		
		Point<String> pStr = new Point<String>();
		pStr.setX("13com");
		pStr.setY("20cm");
		System.out.println(pStr.getX() + "  " + pStr.getY());
	}
}

二、demo2: 定义泛型接口

public interface Info<T>{//在接口上定义泛型
	public T getVar();//定义抽象方法,返回值是泛型类型
	public void setVar(T x);
}

实现接口:

/**
 * InfoImp1 不是一个泛型类,因为类名后无<T>
 * 一个非泛型类在实现泛型接口时,必须给出泛型的具体数据类型
 */
public class InfoImp1 implements Info<String> {

	private String var ;
	
	public InfoImp1(String var) {
		super();
		this.var = var;
	}

	@Override
	public String getVar() {
		return this.var;
	}

	@Override
	public void setVar(String x) {
		this.var = x;
	}
}

多泛型类型的类实现接口

public class InfoImp3<T,K,U> implements Info<T> {
	private T x;
	private U var;
	private K y;
	
	public InfoImp3(T var) {
		super();
		this.x = var;
	}
	@Override
	public T getVar() {
		return x;
	}
	@Override
	public void setVar(T x) {
		this.x = x;
	}
}

调用方法:

public static void main(String[] args) {
		InfoImp1 i = new InfoImp1("hq");
		System.out.println(i.getVar());
		System.out.println("==========================");
		
		InfoImp2<String> i2 = new InfoImp2<String>("huqing-->keep move on");
		System.out.println(i2.getVar());
		System.out.println("==========================");
		
		InfoImp3<String, Double, String> i3 = new InfoImp3<String, Double, String>("hq ---> more");
		System.out.println(i3.getVar());
	}

三、泛型数组:

public class FansArray {

	public static String[] fun2(String[] str) {//接收的数组参数只能是String类型的
		return str;
	}

	public static <T> T[] fun1(T... arg) { // 接收可变参数  类似于传了一个object类型的数组参数
		return arg; // 返回泛型数组
	}

	public static void main(String[] args) {

		Integer intArray[] = fun1(1, 2, 3, 4, 5, 6);
		Integer[] result = fun1(intArray);
		for (Integer in : result) {
			System.out.print(" " + in);
		}
		System.out.println();

		String a[] = fun1("a", "b", "c", "hello");
		String[] result1 = fun1(a);
		for (String in : result1) {
			System.out.print(" " + in);
		}
		System.out.println();
		
		//创建数组getStr
		String[] dataArray = { "自己", "定义的", "数组","测试" };
		String[] getStr = fun2(dataArray);
		
		for (String in : getStr) {
			System.out.print(" " + in);
		}
		System.out.println();
	}
}

四、泛型类型比较:自定义接口,实现该接口的类进行比较

接口:

public interface Comparable<T>{
	public boolean compareTo(T i);
}
实现类:给出比较方法

public class CompareStr implements Comparable<CompareStr> {

	private String mStr;
	
	public CompareStr(String mStr) {
		super();
		this.mStr = mStr;
	}
	
	public String getmStr() {
		return mStr;
	}

	@Override
	public boolean compareTo(CompareStr i) {
		if(mStr.length() > i.mStr.length()){
			return true;
		}
		return false;
	}
}

测试:模拟数据进行比较,实现某个方法

public class BoundType {
	public static <T extends Comparable> T min(T ...a){
		T smallest = a[0];
		for(T item: a){
			if(smallest.compareTo(item)){
				smallest = item;
			}
		}
		return smallest;
	}
	
	public static void main(String[] args) {
		CompareStr result =
				min(new CompareStr("aa"),new CompareStr("ab"),new CompareStr("bbb"),new CompareStr("a"));
		System.out.println("min:"+ result.getmStr());
	}
}
结果:min:a






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012764110/article/details/49923323
个人分类: 我的java学习笔记
上一篇android——Fragment实现懒加载
下一篇Android——显示隐藏移动动画
想对作者说点什么? 我来说一句

Java Generics and Collections

2018年05月09日 2.13MB 下载

关于java泛型的讲解

2011年06月15日 63KB 下载

java泛型机制

2011年11月06日 35KB 下载

JAVA泛型集合

2018年04月26日 3.76MB 下载

全面总结Java泛型

2009年12月17日 81KB 下载

java泛型学习ppt

2011年08月01日 829KB 下载

没有更多推荐了,返回首页

关闭
关闭