java基础巩固之泛型(上)

    最近看代码经常遇到泛型内容,怎奈自己这一块掌握的不好,各种看不懂,所以拿出一点时间专门研究一下,大体上是根据《java核心技术卷一》的例子和解释来学习的,这里记录一下大致的情况,一是巩固整理相关知识点,二是方便以后更快的复习。

  首先,使用泛型的目的:编写的代码可以被很多不同类型的对象所重用。通俗的讲就是做了一个模板,大家根据自己的类型往上套就行了。

  本篇从三个层次来说一下泛型:第一是泛型类,第二是泛型函数,第三是类型变量的限定。

  泛型类:

   这里比较简单,看个例子就基本上掌握了,需要注意的一点:在java库中,一般使用变量E表示集合的元素类型,K和V表示表的关键字和值得类型,T(需要时还可以使用临近的字母U和S)表示任意类型。

  构造一个泛型类:定义一个泛型类,有两个私有变量

  

/*
 * 定义一个泛型的类
 */
class Pat<T,U>
{
	private T first;
	private U second;
	public T getFirst() {
		return this.first;
	}
	public U getSecond() {
		return this.second;
	}
	public Pat(){
	}
	public Pat(T frist,U second)
	{
		this.first=frist;
		this.second=second;
	}

}
  在测试类中调用该泛型类的函数:

 

                /*
		 * 调用泛型类的函数
		 */
		Pat<String,Integer> s=new Pat<String ,Integer>("王五",20);
		System.out.println("姓名:"+s.getFirst()+"\n年龄: "+s.getSecond());


泛型函数(方法):

   泛型方法的定义比泛型函数复杂一点,这里示例是获得一个数组中最中间那个元素:

  

class ArrayAlg
{
	/*
	 * 定义泛型方法
	 * ? static 后面那个<T>感觉可以省略,不晓得怎么个情况
	 * 具体功能:3个T的作用
	 * <T>说明这是一个泛型函数
	 * T说明返回类型
	 * T[]表示参数类型
	 */
	public static <T> T getMiddle(T[] a)
	{
		return a[a.length/2];
	}
	
}
相关的点在注释中写得很清楚了,这里就不多说明。测试类中调用:

/* 
		 * 调用泛型函数
		 */
		String[] names={"张三","李四","王五","赵六"};
		String middle=ArrayAlg.<String>getMiddle(names);//调用泛型函数方法
		String middle1=ArrayAlg.getMiddle(names);//names中类型一致时可以,但是倘若有int和double等容易报错
		System.out.println("middle is:"+middle);


类型变量的限定:

  这个主要针对具有compareTo()方法来进行比较的代码而言,因为不确定T所属的类是不是具有该方法。所有使用这个方法的函数的T将限定为实现Comparable接口。该接口只包含一个compareTo()方法。所以,一般定义方式如下:

public static <T extends Comparable> T min(T[] a).....下面是查找一个数组中最小的元素的方法:

public static <T extends Comparable> T min(T[] a)
	{
		if(a==null||a.length==0)return null;
		T smallest=a[0];
		for(int i=0;i<a.length;i++)
		{
			if(smallest.compareTo(a[i])>0)smallest=a[i];
		}
		return smallest;
	}
   这里对接口 Comparable使用extends而不是implement。《java核心技术卷一》给出的解释是:<T extends Bounding Type>表示T应该是绑定类型的子类型(subtype)。T和绑定类型既可以是类,也可以是接口。选择extends而不是implement原因是extends更接近子类型的概念。
在测试类中调用:

 

                  /*
		 * 类型变量的限定测试
		 */
        String[] ages={"18","19","30","12"};
        String minn=ArrayAlg.<String>min(ages);
        System.out.println("min is:"+minn);

OK,暂时先写到这里。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值