泛型笔记

泛型: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);
}

原文地址:https://www.cnblogs.com/jerryho/p/4752917.html