您的位置 首页 java

初识java—(四十六)泛型

Java 发布的JDK1.5版本中增加了泛型支持,所谓的泛型就是为了让集合在很大程度上记住元素的数据类型。在没有使用泛型之前,一旦把对象存放进Java集合中,集合只会将元素作为Object对象进行处理。当从集合中取出对象时就需要进行强制类型转换。如果转换错误,则将会引起ClassCastException异常(类型转换异常)。

增加泛型支持后的集合,则可以让集合记住元素的类型,并在编译时检查集合中元素的类型,如果往集合中添加不满足类型要求的对象,编译器则会提示错误。增加泛型后的集合,可以让代码更加简洁,程序更加健壮。

9.1 泛型入门

Java集合之所以被设计成以存放Object对象为基础的类,是因为设计之初, 程序员 并不知道我们要用集合来存放什么类型的对象,所以把集合设计成能保存任何数据类型的对象,只要求有很好的通用性。因此而导致了下面两个问题:

1、 集合对元素类型没有任何限制,只要是Object类型就都可以存放。

2、 把对象存放进集合时,集合丢失了对象的状态信息,集合只知道存放的是Object,因此取出时还需要对对象进行一个强制类型转换,增加了编程的复杂度,还有可能会引发ClassCastException异常。

举例1:

public static void main(String[] args) {

List list = new ArrayList ();

list.add(“abc”) ;

list.add(“def”) ;

list.add(5) ;

for ( int i=0;i<list.size();i++){

String s = (String)list.get(i);

System. out .println(s);

}

}

9.1.1 使用泛型

publicstaticvoid main(String[] args) {

List<String> list = new ArrayList<String>();

list.add(“abc”);

list.add(“def”);

//list. add (5); //编译报错

for ( int i=0;i<list.size();i++){

String s = list.get(i); //无需进行强制类型转换

System. out .println(s);

}

}

上面程序创建了一个特殊的List集合,这个List集合只能保存 字符串 对象,不能保存其他类型的对象。创建这种特殊集合的方法是:在集合接口、类后面增加“<>”尖括号,尖括号中写入一个数据类型,即表明这个集合接口、集合类只能保存这种特定类型的对象。

9.1.2 定义泛型接口、类

所谓的泛型就是允许在定义类、接口、方法时使用类型 形参 ,这个类型形参将在声明变量、创建对象、调用方法时动态的指定。

举例1:

publicinterface MyInterface<T>{

public T getType();

publicvoid setType(T t);

}

publicclass MyClass implements MyInterface<String> {

public String getType() {

return null ;

}

publicvoid setType(String t) {

}

}

当创建了带有泛型声明的接口、父类之后,可以为该接口创建实现类,或者从该父类派生子类,但是注意一点:当使用这些接口、父类是不能再包含类型形参,而是必须指出具体的实际类型。如上例所示。

9.1.3 不存在泛型类

在程序中我们为一个 ArrayList <String>指定了泛型后,可以把这个ArrayList<String>看成ArrayList的子类,这个类只能存储String类型的元素,但是实际上,系统并没有为ArrayList<String>生成新的 class文件 ,也不会把ArrayList<String>当成新类,因为并不存在这种泛型类。

文章来源:智云一二三科技

文章标题:初识java—(四十六)泛型

文章地址:https://www.zhihuclub.com/194531.shtml

关于作者: 智云科技

热门文章

网站地图