泛型

泛型

使用泛型类型的通配符

泛型类名称<? extends List> a=null;
"其中<? extends List>表示未知类型,当需要时要单独实例化,另外使用通配符声明的实例化对象不能加入新的信息,只能获取或删除。"
A<? extends List> a=null;
a=new A<ArrayList>;
a=new A<LinkedList>;


"如果使用A<? super List> a=null;"//这样定义对象a,只能接受List接口或上层父类类型
//测试代码
public static void main(String[] args) {
    Student<NvZhuang,Dog> xiaoming=new Student<>();
    xiaoming.setPet(new Dog());
    Dog dog=xiaoming.getPet();
    dog.voice();
    NanZhuang nan=new NanZhuang();
    nan.chuan();
    Student<NanZhuang,Cat> xiaohong=new Student<>();
    Cat cat=new Cat();
    xiaohong.setPet(cat);
     cat=xiaohong.getPet();
    cat.voice();
}

"******************************************************"
//student类部分代码
//通过继承对其传入对象进行限制
public class Student<T,E extends Pet> {
private String name;
private int age;
private T colth;//用泛类创建变量设置,添加set、get方法
private E pet;

public T getColth() {
    return colth;
}
public void setColth(T colth) {
    this.colth = colth;
}

"**************************************************"
public class Pet {

}
"**************************************************"
public class Dog extends Pet{
    public void voice(){
        System.out.println("小狗汪汪叫");
    }
}
"**************************************************"

public class Cat extends Pet {
public void voice(){
        System.out.println("小猫喵喵叫");
    }
}
"**************************************************"
public class ManColth {
public void chuan(){
     System.out.println("穿上帅气的西装");
 }
}
"**************************************************"
public class WomenColth {
public void show(){
    System.out.println("穿好看的衣服");
}
}
"**************************************************"

定义泛型类

"*************************定义泛型类*****************"
public class OverClass<T> {
    private T over;//定义泛型成员变量

    public T getOver() {
        return over;
    }

    public void setOver(T over) {
        this.over = over;
    }

    }
"****************测试类*************************"
public static void main(String[] args) {
      //实例化一个Boolean型的对象
    OverClass<Boolean> over1=new OverClass<Boolean>();
      //实例化一个Float型的对象
    OverClass<Float> over2=new OverClass<>();
    over1.setOver(true);
    over2.setOver(12.3f);
    System.out.println(over1.getOver());
    System.out.println(over2.getOver());
}

总结

使用泛型定义的类在声明该类对象时可以根据不同的需求指定(T)真正的类型,而在使用类中的方法传递或返回数据类型时,将不再需要进行类型转换操作,而是使用在声明泛型类对象时“<>”符号中设置的数据类型。

泛型类声明数组类型

"*****************定义泛型数组*****************"
public class ArrayClass<T> {
    private T[] array;

    public T[] getArray() {
        return array;
    }

    public void setArray(T[] array) {
        this.array = array;
    }

}
"******************测试类********************"
public static void main(String[] args) {
    ArrayClass<String> a=new ArrayClass<>();
    String [] array={"成员1","成员2","成员3","成员4"};
    a.setArray(array);
    for (int i = 0; i <a.getArray().length; i++) {
        System.out.println(a.getArray()[i]);
    }

常用的被泛型化的集合类

集合类泛型定义
ArrayListArrayList<E>
HashMapHashMap<K,V>
HashSetHashSet<E>
vectorVector<E>

泛型实例化常用集合类

public static void main(String[] args) {
    ArrayList<Integer> a=new ArrayList<>();//定义ArrayList容器,设置容器内的值类型为Integer
    a.add(1);//为容器增加新值
    a.add(2);
    for(int i=0;i<a.size();i++){
        int b=a.get(i);
        System.out.println(b);//根据容器的长度循环显示容器内的值
    }
    HashMap<Integer,String> m=new HashMap<>();//定义HashMap容器,设置容器的键名与键值类型
    for(int i=0;i<5;i++){
        m.put(i,"成员"+i);//为容器填充键名与键值
    }
    for(int i=0;i<m.size();i++){
        System.out.println(m.get(i));//根据键名获取键值
    }
    Vector<String> v=new Vector<>();//定义Vector容器
    for(int i=0;i<5;i++){
        v.addElement("程序员"+i);//为Vector容器添加内容
    }
    for(int i=0;i<v.size();i++){
        System.out.println(v.get(i));
    }
    }

泛型总结

1、泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义 就是错误的
2、泛型的类型个数可以是多个
3、可以使用extends关键字限制泛型的类型
4、也可以使用通配符限制泛型的类型

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值