黑马程序员--泛型的笔记

来源:互联网 发布:自动发微博软件 编辑:程序博客网 时间:2024/05/22 09:45

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

泛型

定义:

泛型是1.5的新特性,它主要用于集合和反射中。使用的好处是免去强制类型转换之苦,他是给编译器用的限定集合中的输入类型,让编译器挡住源程序中的非法输入。用于解决安全问题,是一种类型安全机制。

好处:

1.将运行时期出现的问题ClassCastException,转移到了编译时期。方便程序员解决问题。让运行时问题减少,安全。
2.避免了强制传换的麻烦。

泛型的格式:

通过<>来定义要操作的引用数据类型。


在使用Java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见;只要见到<>就要定意泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到集合中。


泛型类

什么时候定义泛型类呢?
当要操作的引用数据类型不确定的时候,早期用Object来强转,现在定义泛型来完成扩展。

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

泛型方法

为了让不同的方法可以操作不同的类型,而且类型还不确定。那么可以将泛型定义到方法上。
public<T> void show (T t)
{    }
public <Q> void print(Q q)
{    }


静态方法

静态方法的特殊之处在于不可以访问类上的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
public static<T> void method(T t)
{     System.out.println("method"+t);     }


泛型接口

interface Inter<T>
{   void show(T t); }


class InterImp <T> implements Inter<T>
{
public void show (T t)
{
 System.out.println(t);
}


}


泛型限定

?通配符或者理解为占位符。
泛型的限定:
?extends E:可以接收E类型或者E的字类型。上限
?super E:可以接收E类型或者E的父类型。下限


几个例子
1.ArrayList<E>整个称为泛型类型
2.ArrayList<E>中的E称为类型变量或者是类型参数
3.整个ArrayList<integer>称为参数化的类型
4.ArrayList<integet>中的integer称为类型参数的实例或者实际类型擦参数
5.ArrayList<integer>中的<>念做typeof
6.ArrayList称为原始类型

注意:

基本类型的数组不能使用参数化的泛型。只有引用类新才能作为泛型的实际类型

泛型中的通配符是“?”

总结:

使用?通配符可以引用其他其他各种参数化的类型,?通配符定义的变量主要做引用,可以调用与参数无关的方法,不能调用与参数有关的方法。

自定义泛型和通配符泛型的抉择
1.在整个类中只有一处使用了泛型,使用时注意加了泛型了参数不能调用与参数类型有关的方法比如“+”,比如打印出任意参数化类型集合中的所有内容,就适合用通配符泛型<?>
public static void printCollecton(Collection <?> collection)
{
for(Object obj: collection)
{
System.out.println(obj);
}
}


2.当一个类型变脸用来表达两个参数之间或者参数与返回值之间的关系时,即统一各类型变量在方法签名的两处被使用,或者类型变量在方法体代码中也被使用而不仅仅在签名的时候使用,这是应该用自定义泛型<T>。泛型方可以调用一些时间类型的方法。比如集合的add方法。


public static <T> T autoConvertType(T obj)
{
     return(T)obj;

}


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

原创粉丝点击