泛型
- 泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数;
- 可以声明泛型类、泛型方法和泛型接口(下一章介绍接口)。
- 下面通过例题演示一下泛型类和泛型方法。
例:泛型类
class GeneralType <Type> {
Type object;
public GeneralType(Type object) {
this.object = object;
}
public Type getObj() {
return object;
}
}
public class Test {
public static void main(String args[]){
GeneralType<Integer> i = new GeneralType<Integer>(2);
GeneralType<Double> d = new GeneralType<Double> (0.33);
System.out.println("i.object=" + (Integer)i.getObj());
System.out.println(“i.object=” + (Integer)d.getObj()); // 编译错误
}
}
例:泛型方法
class GeneralMethod {
<Type> void printClassName(Type object) {
System.out.println(object.getClass().getName());
}
}
public class Test {
public static void main(String[] args) {
GeneralMethod gm = new GeneralMethod();
gm.printClassName("hello");
gm.printClassName(3);
gm.printClassName(3.0f);
gm.printClassName(3.0);
}
}
通配符泛型
- 使用通配符可以使程序更为通用
class GeneralType <Type> {
Type object;
public GeneralType(Type object) {
this.object = object;
}
public Type getObj() {
return object;
}
}
class ShowType {
public void show (GeneralType<?> o) {
System.out.println(o.getObj().getClass().getName());
}
}
程序的运行结果如下:
java.lang.Integer
java.lang.String
有限制的泛型
-
虽然可以使用泛型使程序能够处理多种不同类型对象,并不是所有
对象都能进行某些操作; -
有时候需要将泛型中参数代表的类型做限制,此时就可以使用有限
制的泛型。 -
在参数“Type”后面使用“extends”关键字并加上类名或接口名,
表明参数所代表的类型必须是该类的子类或者实现了该接口- 注意,对于实现了某接口的有限制泛型,也是使用extends关键字,而
不是implements关键字
- 注意,对于实现了某接口的有限制泛型,也是使用extends关键字,而
-
举个例子
class GeneralType <Type extends Number> { Type object; public GeneralType(Type object) { this.object = object; } public Type getObj() { return object; } } public class Test { public static void main(String args[]){ GeneralType<Integer> i = new GeneralType<Integer> (2); //GeneralType<String> s = new GeneralType<String> ("hello"); //非法,T只能是Number或Number的子类 } }