`
哈达f
  • 浏览: 114541 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

泛型-

    博客分类:
  • j2se
 
阅读更多

 

泛型:JDK1.5版本出现的一个安全机制。
	好处:将运行时出现的问题(ClassCastException)转移到了编译时期。
	      避免了强转的麻烦。
	格式:通过<>在内指定操作的引用数据类型。

泛型可以定义在类上。

早期:
class Tool
{
	private Object obj;
	public void setObj(Object obj)
	{
		this.obj = obj;
	}
	public Object getObj()
	{
		return obj;
	}
}

main()
{
	Tool t = new Tool();
	t.setObj(new Worker());//当往里传递的参数为t.setObject(new Student());//编译通过,运行出现ClassCastException
	Worker w = (Worker)t.getObj();//必须要强转
}


现在:通过泛型类来完成。
class Tool<Q>
{
	private Q obj;
	public void setObj(Q obj)
	{
		this.obj = obj;
	}
	public Q getObj()
	{
		return obj;
	}
}

main()
{
	Tool<Worker> t = new Tool<Worker>();
	t.setObject(new Worker());//如果传入t.setObject(new Student());编译时会出现失败。
					//那么就是将运行时出现的问题转移到了编译时期。
	Worker w = t.getObj();//不需要在进行强转。
}

什么时候定义泛型类呢?
当类中要操作的引用数据类型不确定的时候,就使用泛型类。

在使用泛型类时,只有在建立泛型类对象时,才可以指定具体要操作的引用数据类型。
那么该对象在调用方法时,操作的类型都是相同的。

如果想方法在调用的时,操作的类型不确定,而且不相同,可以将泛型定义在方法上。

class Utils
{
	public <T> void printInfo(T t)
	{
		
	}
	public <Q> void show(Q q)
	{
		
	}
}


泛型的限定:
1,? extends E: 接收的是E类型对象或者E的子类型对象。
2,? super E:接收的是E类型对象或者E的超类,直至Object对象
分享到:
评论
1 楼 ricoyu 2011-10-23  
引用
? super E:接收的是E类型对象

应该是: ? super E:接收的是E类型对象或者E的超类,直至Object对象

相关推荐

Global site tag (gtag.js) - Google Analytics