zoukankan      html  css  js  c++  java
  • 泛型笔记

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

    泛型不仅可以定义在类上,也可以定义在方法上.

    好处:(泛型避免了强制转换)
    1.

    将运行时期出现问题类型转换异常ClassCastException移到了编译时期。

    方便解决问题并且减少了运行时间

    2.

    避免了强制转换麻烦。

    泛型格式:

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

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

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

    尖括号<>就是用来接收类型的。

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

    class GenericDemo 
    {
        public static void main(String [] args) 
        {
    
            ArrayList<String> al = new ArrayList<String>();
    
            al.add("abc01");
            al.add("abc002");
            al.add("abc0303");
            
            Iterator<String> it = al.iterator();
            
            while(it.hasNext())
            {
                String s = it.next();
    
                System.out.println(s+":"+s.length());
            }
        }
    }

    应用泛型以后.集合框架编译的时候不会在抛出注意事项.

    HashSet中覆写的equals方法必须进行强制转换.其引用的Object,而Object没有泛型.

    泛型类:
    什么时候定义泛型类?
    当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。而现在定义泛型来完成扩展。

    class Utils<QQ>
    {
        private QQ q;
        public void setObject(QQ q)
        {
            this.q = q;
        }
        public QQ getObject()
        {
            return q;
        }
    }
    
    
    class  GenericDemo3
    {
        public static void main(String[] args) 
        {
    
            Utils<Worker> u = new Utils<Worker>();
    
            u.setObject(new Student());
            Worker w = u.getObject();;
            /*
            Tool t = new Tool();
            t.setObject(new Student());
            Worker w = (Worker)t.getObject();
            */
        }
    }

    泛型局限性:

    泛型类定义的泛型,在整个类上都有效,当类型确定以后,就只能操作该类型,当泛型被方法使用后.所有的方法要操作的类型都被固定,为了让不同方法可以操作不同的类型,

    可以将方法定义在方法上面,定义在方法上的泛型只在其方法上有效.

    避免局限性演示:

    class Demo  
    {
        //泛型定义在方法上,可以打印出任意类型的数据.
        public <T> void show(T t)
        {
            System.out.println("show:"+t);
        }
        public <Q> void print(Q q)
        {
            System.out.println("print:"+q);
        }
    }
    
    class GenericDemo 
    {
        public static void main(String[] args) 
        {
            Demo d = new Demo();
            d.show("haha");
            d.show(1);
            d.print(5);
            d.print("hehe");
            
        }
    }

    静态泛型类:静态方法不可以访问类上定义的泛型 如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上.(泛型类型必须放在返回值类型的前面)

    格式:(静态先加载,而后才有对象)

    public static <W> void method(W w)
    {
      System.out.println("method:"+w);
    }

  • 相关阅读:
    codevs 1086 栈 2003年NOIP全国联赛普及组
    1200 同余方程 2012年NOIP全国联赛提高组
    【bzoj4939】【YNOI2016】掉进兔子洞(莫队)
    洛谷P3674 小清新人渣的本愿(莫队)
    Lucas卢卡斯定理
    组合数学习笔记
    洛谷P3178 [HAOI2015]树上操作(线段树)
    洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)
    洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
    bzoj3140: [Hnoi2013]消毒(二分图)
  • 原文地址:https://www.cnblogs.com/jerryho/p/4752917.html
Copyright © 2011-2022 走看看