Java基础篇--泛型类、泛型方法、类型通配符的使用

泛型类、泛型方法、类型通配符的使用

泛型机制是在Java SE5中提出的,在此之前,使用Object引用变量可以引用所有类型的对象。在类中定义Object类型的变量,接收任意类型的数据。但是给调用者返回这个数据时,数据就被提升为Object类型,调用者需要再手动向下转型,这是利用了对象的多态性。向下转型可能会抛出ClassCastException类型转换异常。因此引入泛型机制,定义泛型类,类中定义泛型成员变量,让调用者来声明具体的数据类型。

泛型方法

在方法中声明泛型,叫做泛型方法。如果一个方法需要声明一个或多个类型参数,则可以使用泛型。泛型方法在方法声明时加上“<泛型列表>”修饰。如

public <T> void printInfo(T info){
System.out.println(info);
}

调用泛型方法时,可以显式地指定方法的类型参数,也可以不指定方法的类型参数。
如果方法的类型参数不显式地指定,那么编译器会根据传入地实参类型来自动判断类型参数。

Info test = new Info();
test.printInfo("a cute dog");

自定义泛型方法,将T类型的参数进行打印输出。

public class GenericMethodTest{
public static <T> void print(T input){     //泛型方法
	   	System.out.printlb(input);
	    }

public static void main(String args[]) throws URISyntaxException{
		int a1=1;
		Integer a2=2;
		char b='B';
		 String s="Hello";
		URI u = new URI("www.baidu.com");
 	print(a1);
 	 print(a2);
   	print(b);
    	print(s);
	 print(u);
	
	   }

}

运行结果如下:

1
2
B
Hello
www.baidu.com

泛型类

泛型类的声明实在类名后

加上“<泛型列表>”,一般形式如下:

class 类名<泛型列表>

使用泛型类声明对象时,必须指定类中使用的泛型的具体数据类型。

例:
将GenericsTest定义为泛型类。

public class GenericsTest<T>{
	private T info;
	public T getinfo(){
	return info;
	}
	public void setinfo(T info){
	this.info = info;
	}

}

标记符

在泛型种有一些常用的大写字母作为标记符,例如E,T等。这些大写字母没有任何本质区别,只是一种习惯性命名方式。他们的区分完全是为了提高代码的可读性,因此完全可以使用别的字符串代替他们。
常用标记符如下

标记符含义
EElement(元素)首字母,一般用在集合里
TType(类型)首字母
S、U、V第二、第三、第四种类型
KKey(键)首字母
VValue(值)首字母
NNumber(数字)首字母
?不确定类型

泛型接口

泛型应用在接口上,该接口就成为泛型接口。
声明形式:

interface 接口名<泛型接口>

泛型类可以使用泛型接口
例:

public interface GenericsIntfTest<T>{	
	public T getinfo();
	public void sentifo(T info);
}

类型通配符

泛型中的类型统配符“?”表示位置类型,用来匹配泛型参数。
通配符“?”有以下三种形式:

1、无限定通配符<?>
2、上限通配符<? extends SuperClass>,表示参数类型只能是SuperClass的子类。
3、下限通配符<? super SubClass>,表示参数类型只能式SubClass的父类。

第一种代表任何类型的通配符,第二种和第三种是有边界限制的通配符。

**参考书籍:《java SE快速入门》--中公教育优就业研究院**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值