您的位置:首页 > 编程语言 > Java开发

java泛型总结

2014-01-27 16:46 183 查看
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:

public class ExampleA {

public <T> void f(T x) {

System.out.println(x.getClass().getName());

}

public static void main(String[] args) {

ExampleA ea = new ExampleA();

ea.f(" ");

ea.f(10);

ea.f('a');

ea.f(ea);

}

}

输出结果:

java.lang.String

java.lang.Integer

java.lang.Character

ExampleA

使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。

需要注意,一个static方法,无法访问泛型类的类型参数,所以,若要static方法需要使用泛型能力,必须使其成为泛型方法。
带两个类型参数的泛型类

10.3 带两个类型参数的泛型类

在泛型中,可以声明一个以上的类型参数,只需要在这些类型参数之间用逗号隔开。下面看一个简单的例子。

【例10.2】 带两个类型参数的泛型。
//--------------文件名twoGen.java,程序编号10.3-----------

//本类带有两个类型参数
public class twoGen<T,V>{
T ob1;
V ob2;
//构造方法也可以使用这两个类型参数
twoGen(T o1, V o2){
ob1 = o1;
ob2 = o2;
}
//显示T和V的类型
void showTypes(){
System.out.println("Type of T is "+ob1.getClass().getName());
System.out.println("Type of V is "+ob2.getClass().getName());
}
T getOb1(){
return ob1;
}
V getOb2(){
return ob2;
}
}

下面这个程序演示流如何使用上面这个泛型类。
//--------------文件名simpGen.java,程序编号10.4-----------

public class simpGen{
public static void main(String args[]){
twoGen<Integer, String> tgObj;   //指定类型参数的实际类型
//构造方法中需要再次指定类型参数,同时还要传递实际参数
tgObj = new twoGen<Integer, String>(100,"Hello");
tgObj.showTypes();
int v = tgObj.getOb1();
System.out.println("value: "+v);
String  str = tgObj.getOb2();
System.out.println("value: "+str);
}
}

程序的输出结果如下:
Type of T is java.lang.Integer
Type of V is java.lang.String
value: 100
value: Hello

与只有一个类型参数的泛型相比,本例并没有什么难于理解的地方。Java并没有规定这两个类型参数是否要相同,比如,下面这样来创建对象也是可以的:

twoGen<String, String> tgObj = new 
twoGen<Integer, String> ("Hello","World");

这样T和V都是String类型,这个例子并没有错。但如果所有的实例都是如此,就没有必要用两个参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: