黑马程序员——Java基础——泛型

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

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

好处:1、将运行时期出现的问题转移到编译时期,方便于程序员解决问 题,让运行事情问题减少,安全。
2、避免了强制转换麻烦。

格式:通过< >来定义要操作的引用数据类型。在集合框架很常见。
如下面:

import java.util.*;
public class FanXingTest {
    public static void main(String[] args){
        ArrayList<Integer> al=new ArrayList<Integer>();
        al.add(12);
        al.add(15);
        al.add(20);

        Iterator it=al.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

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

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

import java.util.*;
public class FanXingTest4 {
    public static void main(String[] args){
        Methoc<Integer> m=new Methoc<Integer>();
        m.show(123);
        //m.show("asdf");     //这里是错误的,因为show可以传递的参数类型已经固定了,只能是整形
        m.print("asdf");     //print方法上定义了泛型,所以它不爱限制
        m.say("bbb");
    }
}

class Methoc<AA>{
    public void show(AA q){
        System.out.println(q);
    }

    public <QQ> void print(QQ q){
        System.out.println(q);
    }

    public static <BB> void say(BB b){   //say方法是静态的,所以它不可以访问类上定义的泛型,必须将泛型定义在方法上
        System.out.println(b);
    }
}

泛型也可以定义在接口上。
如:

import java.util.*;
public class FanXingTest5 {
    public static void main(String[] args){
        Test1 t=new Test1();
        t.say("ads");
        //t.say(123);     //错误,只能传递String 类型
    }
}

interface jiekou<QQ>{
    public void say(QQ q);
}

class Test1 implements jiekou<String>{
    public void say(String q){
        System.out.println(q);
    }
}

但如果类操作的类型也不确定,可以这样:

import java.util.*;
public class FanXingTest5 {
    public static void main(String[] args){
        Test1<Integer> t=new Test1<Integer>();
        t.say(123);
    }
}

interface jiekou<QQ>{
    public void say(QQ q);
}

class Test1 <QQ> implements jiekou<QQ>{
    public void say(QQ q){
        System.out.println(q);
    }
}

泛型限定:
? extends E 泛型可以接收E,也可以接收E的子类型;
? super T 泛型可以接收T,也可以接收T的父类型。

import java.util.*;
public class TongPeiFu2 {
    public static void main(String[] args){
        ArrayList<Persona> a=new ArrayList<Persona>();
        a.add(new Persona("ads",23));
        a.add(new Persona("sss",11));
        a.add(new Persona("oui",62));

        ArrayList<Studenta> a2=new ArrayList<Studenta>();
        a2.add(new Studenta("人有有",23));
        a2.add(new Studenta("小丽",11));
        a2.add(new Studenta("方方",62));

        show(a);
        show(a2);
    }

    public static void show(ArrayList<? extends Persona> a){
        Iterator it=a.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

}

class Persona{
    String name;
    int age;
    Persona(String name, int age){
        this.name=name;
        this.age=age;
    }
    public String toString(){
        return this.name;
    }
}

class Studenta extends Persona{
    Studenta(String name,int age){
        super(name,age);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值