Java泛型机制

本文介绍了Java中泛型的使用,包括其带来的好处,如统一集合元素类型,减少类型转换,以及泛型的缺点,如降低元素多样性。同时,展示了JDK8以后的自动类型推断机制,简化了代码编写。通过示例代码,演示了如何使用泛型以及自动类型推断来操作集合和自定义泛型类。

JDK5.0之后推出新特性:泛型。

泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的。(运行阶段泛型没用)

使用泛型的好处?

​ 第一:集合中存储的元素类型统一了。

​ 第二:从集合中取出元素类型是泛型指定的类型,不需要大量的”向下转型“。

泛型的缺点:导致集合中存储的元素缺乏多样性。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *未使用泛型
 * 从集合中取出元素需要进行转型
 */
public class GenericTest01 {
    public static void main(String[] args) {
        //创建对象
        Cat c = new Cat();
        Bird b = new Bird();
        //将对象添加到集合中
        List mylist = new ArrayList();
        mylist.add(c);
        mylist.add(b);
        //遍历集合,取出每个Animal,让它move
        Iterator it = mylist.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (obj instanceof Animal) {
                Animal a = (Animal) obj;
                a.move();
            }
        }
    }
}

class Animal {
    public void move() {
        System.out.println("动物在移动");
    }
}

class Cat extends Animal {
    public void CatchMoush() {
        System.out.println("猫捉老鼠");
    }
}

class Bird extends Animal {
    public void Sing() {
        System.out.println("鸟在唱歌");
    }
}
//使用泛型机制
List<Animal> mylist = new ArrayList<Animal>();
        mylist.add(c);
        mylist.add(b);
        Iterator<Animal> it = mylist.iterator();
        while (it.hasNext()){
            Animal a = it.next();
            a.move();
        }
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * JDK8之后引入了:自动类型推断机制。(又称钻石表达式)
 */
public class GenericTest02 {
    public static void main(String[] args) {
        //ArrayList<这里的类型会自动推断>()
        //自动类型推断
        List<Animal> mylist = new ArrayList<>();
        mylist.add(new Animal());
        mylist.add(new Cat());
        mylist.add(new Bird());

        //遍历
        Iterator<Animal> it = mylist.iterator();
        while (it.hasNext()) {
            Animal a = it.next();
            a.move();
        }
    }
}

自定义泛型

/**
 * 自定义泛型
 */
public class GenericTest03<A> {
    public void doSome(A a) {
        System.out.println(a);
    }

    public static void main(String[] args) {
        GenericTest03<String> gt = new GenericTest03<>();
        gt.doSome("abc");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值