Java高级技术第一章之Java的泛型,
分享于 点击 5374 次 点评:273
Java高级技术第一章之Java的泛型,
前言
Java高级技术系列前言点击此处
Java的泛型
泛型边界,参见下面的代码:
public class Main {
public static void main(String[] args) {
FX<Number> ex_num = new FX<Number>(100);
FX<Integer> ex_int = new FX<Integer>(200);
FX<String> ex_str = new FX<String>("str");
getUpperNumberData(ex_str);
//报错,因为函数getUpperNumberData()定义的类型要继承自Number
getUpperNumberData(ex_num);
getUpperNumberData(ex_int);
}
public static void getUpperNumberData(FX<? extends Number> temp){
System.out.println("class type :" + temp.getClass());
}
public static class FX<T> {
private T ob;
public FX(T ob) {
this.ob = ob;
}
}
}
上例中,是泛型的上边界限制条件,同样的,可以修改泛型函数:
public static void getLowerNumberData(FX<? super Integer> temp){
System.out.println("class type :" + temp.getClass());
}
/*这样得到的是下边界限制条件,要求类型必须是Integer的父类,这里面也包括Interger本身*/
泛型的好处:
泛型的注意事项:
(1)泛型的类型参数只能是类类型(包括自定义类),不能是简单类型,例如int等都不可以作为泛型的类型来使用,要写为Interger.
(2)泛型的类型参数可以有多个,例如Map类就是实现了两个类型K-V都是泛型。
(3)不能对确切的泛型类型使用instanceof操作。
例如:
if(ex_num instanceof FX<Number>){ }
(4)创建确切类型的泛型数组是不被编译器通过的:
例如下面的代码,是不会被编译器通过的:
List<String>[] test = new List<String>[10];
如果想要使用泛型数组,需要使用通配符,不能确切指明类型,例如:
List<?>[] test = new List<?>[10];//不会报错
在取出成员的时候,要使用强制类型转换来完成,完整代码如下:
List<?>[] test = new List<?>[10];
Object o = test;
Object[] oa = (Object[]) o;
//创建引用
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
//加入成员
Integer s = (Integer) test[1].get(0); //取出成员
System.out.println(s);
相关文章
- 暂无相关文章
用户点评