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

java 泛型,

来源: javaer 分享于  点击 5663 次 点评:251

java 泛型,


JDK1.5版本以后出现的新特性,用于解决安全问题,时一种安全机制。

好处:

1.将运行时出现的问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行问题减少,安全。

2.避免了强制转换的麻烦。

泛型格式:通过<>来定义要操作的引用数据类型。

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。

其实<>就是用来接收类型的。

当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

public class GenericDemo {
    public static void main(String[] args) {
        TreeSet<String> ts = new TreeSet<String>(new MyComparetor());
        ts.add("s");
        ts.add("fff");
        ts.add("hdh");
        ts.add("oamsc");
        Iterator<String> it = ts.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

class MyComparetor implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
        if (num == 0) {
            return o1.compareTo(o2);
        }
        return num;
    }
}

泛型类:

当类中操作的引用数据类型不确定的时候,早期定义Object来完成扩展。

现在定义泛型来完成扩展。

 

泛型方法:

泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有方法要操作的类型就已经固定了。

为了让不同方法操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。

静态方法不可以访问 类上定义的泛型。

如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。

T:代表具体类型

?:不明确类型,占位符。

public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<String> ts = new ArrayList<String>();
        ts.add("s");
        ts.add("fff");
        ts.add("hdh");
        ts.add("oamsc");
        ArrayList<Integer> ts1 = new ArrayList<Integer>();
        ts1.add(1);
        ts1.add(2);
        ts1.add(3);
        ts1.add(4);
        printList(ts);
        printList_1(ts);
        printList(ts1);
        printList_1(ts1);
    }

    public static void printList(ArrayList<?> al) {
        Iterator<?> it = al.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }

    public static <T> void printList_1(ArrayList<T> al) {
        Iterator<T> it = al.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

类型限定:

?:通配符,可以理解为占位符。

<? extends E>:可以接收E类型或者E子类类型,上限。

<? super E>:可以接收E类型或者E父类类型,下限。

 

  

 

相关文章

    暂无相关文章
相关栏目:

用户点评