黑马程序员——泛型

来源:互联网 发布:mac版 photos 编辑:程序博客网 时间:2024/06/06 04:00

------- android培训、java培训、期待与您交流! ----------

泛型是JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。

泛型格式:通过<>来定义要操作的引用数据类型。其实<> 就是用来接收类型的。

当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

好处

1.将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题。

2.避免了强制转换麻烦。


class GenericDemo {public static void main(String[] args) {//使该ArrayList中只能存入StringArrayList<String> al = new ArrayList<String>();al.add("a5o01");al.add("ry9u1");al.add("abcrt4");//不用泛型下一句就能存入ArrayList,在迭代器中强转成String就会出错//al.add(4);相当于al.add(new Integer(4))有个自动装箱动作//迭代器也要记得加上泛型,这样用迭代器操作元素时就不用强转Iterator<String> it = al.iterator();while(it.hasNext()){String s = it.next();System.out.println(s+":"+s.length());}}}

泛型类

当类中要操作的引用数据类型不确定的时候使用

P.S.就相当于工具类操作不同的类,这个工具类就要有扩展性,传啥操作啥,早期定义Object来完成扩展,现在定义泛型来完成。

class Cat{}class Dog{}class Utils<A>//泛型类,传啥操作啥{private A q;public void setObject(A q){this.q = q;}public A getObject(){return q;}}class  GenericDemo{public static void main(String[] args) {Utils<Cat> u = new Utils<Cat>();u.setObject(new Cat());Cat c = u.getObject();;/*u.setObject(new Dog());Dog d = u.getObject();//这就不行,工具类对象在建立时明确了操作的是Cat*/}}

泛型类定义的泛型,在整个类中都有效。如果作为参数被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

方法若要操作其他类型,只能再创建操作其他类型的泛型类对象。

这时为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上(泛型方法)。

public <T> void print(T t)
{
System.out.println("print:"+t);
}

只在方法中有效,传啥操作啥;

注意:泛型方法的泛型放在返回值类型前面;

静态方法不可以访问类上定义的泛型;

如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。


泛型也可定义在接口上


泛型限定

<? >通配符。不确定类型;也可以理解为占位符。

<? extends E>: 可以接收E类型或者E的子类型。上限。

<? super E>: 可以接收E类型或者E的父类型。下限

使用泛型限定后操作更为灵活~



0 0
原创粉丝点击