首页 > 编程语言 > 详细

java 泛型

时间:2020-04-06 16:39:47      阅读:58      评论:0      收藏:0      [点我收藏+]

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父类类型,下限。

 

  

 

java 泛型

原文:https://www.cnblogs.com/hongxiao2020/p/12642582.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!