黑马程序员---泛型

来源:互联网 发布:淘宝代销和分销的区别 编辑:程序博客网 时间:2024/06/18 15:12

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

 

泛型。

应用于编译时期,给编译器使用的技术,到了运行时期,泛型不存在。

好处:

1,将运行时期的问题ClassCastException问题转换成了编译失败,体现在了编译时期,让程序员就可以直接解决问题。

2,避免了强制转换的麻烦。

 

只要带有<>的类或者接口,都属于带有类型参数的类或者接口,在使用这些类或者接口时,必须给<>中传递一个具体的引用数据类型。

当类中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。这样可以避免强转的麻烦,而且将运行时期遇到的问题转移到编译时期。

 

泛型的体现。

1,泛型类,将泛型定义在类上。

class Tool<Q>

{

private Q obj;

public void setObject(Q obj)

{

this.obj = obj;

}

public Q getObject()

{

return obj;

}

}

2,当方法操作的引用数据类型不确定的时候,可以将泛型定义在方法上。

public <W> void method(W w)

{

System.out.println(“method:”+w);

}

3,静态方法上的泛型:静态方法无法访问类上定义的方法。如果静态方法操作的引用数据类型不确定的时候,必须要将泛型定义在方法上。

public static <Q> void function(Q t)

{

System.out.println(“function:”+t);

}

4,泛型接口。

interface Inter<T>

{

void show(T t);

}

class InterImpi <R> implements Inter<R>

{

public void show(R r)

{

System.out.println(“show:”+r);

}

}

 

泛型通配符:?

可以解决当具体类型不确定的情况,当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能,可以用通配符?来表示未知类型。

 

泛型限定。

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

向集合内添加元素时,既可以添加E类型对象,又可以添加E的子类型对象,因为在取元素的时候,E类型既可以接收E类对象,又可以接收E的子类对象。

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

当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。

 

注意:

1,泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是Object类型。

2,使用带泛型的类创建对象时,等式两边指定的泛型必须一致。

3,等式两边可以在任意一边使用泛型,在另一边不使用。

 

原创粉丝点击