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】 带两个类型参数的泛型。
下面这个程序演示流如何使用上面这个泛型类。
程序的输出结果如下:
与只有一个类型参数的泛型相比,本例并没有什么难于理解的地方。Java并没有规定这两个类型参数是否要相同,比如,下面这样来创建对象也是可以的:
这样T和V都是String类型,这个例子并没有错。但如果所有的实例都是如此,就没有必要用两个参数
是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:
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 |
twoGen<String, String> tgObj = new twoGen<Integer, String> ("Hello","World"); |
相关文章推荐
- 为Java泛型总结
- Java泛型总结(集合泛型、方法泛型、通配符)
- Java泛型介绍——HashMap总结
- Java泛型总结
- java泛型的知识总结
- Java进阶--Java泛型总结
- Java总结篇系列:Java泛型
- java泛型总结
- Java泛型总结
- Java泛型总结(转)
- 全面总结Java泛型
- Java总结篇系列:Java泛型
- Java基础学习总结(82)——Java泛型实例教程
- java泛型学习-自定义泛型方法与类型推断总结
- java泛型知识总结
- Java泛型介绍——HashMap总结
- Java基础学习总结(82)——Java泛型实例教程
- java泛型总结学习
- java泛型小总结
- 转载:java泛型总结