您的位置:首页 > 职场人生

黑马程序员之Java泛型浅说

2014-07-24 14:33 302 查看
1.泛型是我们需要的程序设计手段,使用泛型机制编写的程序代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的 安全性和可读性。尤其是对于集合类有用。在Java1.5后最大的变化莫过于增加了泛型机制。

在eclipse中,我们将java编译器的级别调制1.4及以下就会发下:(实例代码如下)我们所使用的ArrarList(此时不能使用泛型),List没有黄色警告部分,但是在进行get()的时候我们必须进行向下类型转换,才可以能够方便的使用放在ArrayList中的类型变量。如果在get()的时候不进行向下类型转换,这程序在编译的时候会产生错误。

import java.util.List;
import java.util.ArrayList;

public class ArrayListTest {
public static void main(String[] args) {
List list = new ArrayList();

list.add("String");
list.add(new Integer(2));
list.add(new Boolean(false));
list.add("String");

String str = (String) list.get(0);
Integer in = (Integer) list.get(1);// 向下类型转换
Boolean bl = (Boolean) list.get(2);
}
}

当我们把编译器的级别调制1.6以上的时候,在使用上述代码进行编译时候就会显示黄色警告信息:Add Type arguments to "ArrayList",提示我们进行变量类型的参数化,当上述代码进行变量类型参数化<String>后,我们发现list只能添加String类型量,而添加其他类型量后就会发生错误;同时在进行get()的时候,我们不必进行类型转换,便可以直接使用。

public class ArrayListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();

list.add("String");
// list.add(new Integer(2));//出错,不能添加Integer类型量
// list.add(new Boolean(false));//出错,不能添加Boolean类型量
list.add("String");

String str = list.get(0);
// Integer in = (Integer) list.get(1);
// Boolean bl = (Boolean) list.get(2);
}
}

2.类型变量的限定

有时候,我们需要的类和方法需要对类型变量加以约束,可以将<T>中的T限制实现了某一接口和是某一子类,那么我们就需要使用关键字extends对其进行限定:

<T extends BoundingType>.,表示T应该是绑定类型的子类型。T和绑定类型可以是类,也可以是接口。而选择extends作为关键字的原因是其更接近子类的概念。一个类型变量或通配符可以有多个限定,如: T extends Comparable & Serializable ;限定类型用“ & ”分隔,而用逗号来分隔类型变量。

希望下面程序会对你的理解有帮助。

public class ListGenericFoo<T extends List>{
private T[] fooArray;
public T[] getFooArray(){
return fooArray;
}

public void setFooArray(T[] fooArray){
this.fooArray = fooArray;
}

public static void main(String[] args){
ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>();
ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>();

LinkedList[] linkedList = new LinkedList[10];

foo1.setFooArray(linkedList);

ArrayList[] arrayList = new ArrayList[10];

foo2.setFooArray(arrayList);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息