黑马程序员-泛型
出现原因:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制
- 好处:
1.将运行时出现的ClassCastException,转移到了编译时期,就是为了方便我们解决问题,让程序运行时出现的问题减少,
2.重要的是:避免的强制类型转换的麻烦
- 泛型的格式 (通常在集合框架里面用得比较多一点)
用一个<>当中包含一个我们指定的数据类。如ArrayList<String>
<>就是用来接收数据类型,就类比函数传参数,
注意:只能传递引用数据类型
java用到的泛型对象我们可以到API文档中具体查看;
- 什么时候定义泛型呢?
当我们类当中我们要操作的数据类型不确定的时候。
早期我们定义一个Object来完成扩展
现在定义泛型来扩展
- 泛型类定义的泛型,在整个类中就有效,如果类当中的方法被调用,那么泛型类被定义
明确要操作的对象以后,那么我们所要操作的类型也就固定了。如何解决这个问题呢?
答:为了让不同的方法可以操纵不同的类型,而去我们的类型还不确定,那么我们可以把泛型定义咋
方法上面,
public <T> void Show(T tt);//泛型方法的定义方式
public static <T> void method( M mm); //泛型的静态方法
特殊之处:静态方法不可以访问类上定义的泛型,
- Java能够定义泛型类。我们能不能自己定义呢?
package com.text; public class zhulang { /** *自己定义的泛型类。 * @param args */ public static void main(String[] args) { //泛型类明确了存储的内容只能在里面存储不同的对象 Mygenerosity<Tool> my = new Mygenerosity<Tool>(); my.setObject(new Tool()); Tool t = (Tool)my.getObject(); //调用泛型方法 my.Show("泛型方法"); //调用静态的方法 Mygenerosity.method("静态方法"); } } class Tool { @Override public int hashCode() { // TODO Auto-generated method stub return 88; } } /** * 自己定义一个泛型 * @param <ZZ> */ class Mygenerosity<ZZ> { private ZZ zz; public void setObject(ZZ zz) { this.zz = zz; } public ZZ getObject() { return this.zz; } public static <M> void method(M mm) { System.err.println("泛型的静态方法"); } //泛型方法 public <T> void Show(T t) { System.out.println("Shwo:泛型方法"+t); } public <Q> void print(Q q) { System.out.println("print:泛型方法"+q); } }