欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java高级技术第一章之Java的泛型,

来源: javaer 分享于  点击 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);

相关文章

    暂无相关文章
相关栏目:

用户点评