java泛型总结

来源:互联网 发布:西班牙语字典推荐 知乎 编辑:程序博客网 时间:2024/04/29 18:32

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 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类型,这个例子并没有错。但如果所有的实例都是如此,就没有必要用两个参数
0 0
原创粉丝点击