Java泛型机制 类型自动推断 自定义泛型

鳄鱼君

发表文章数:642

热门标签

, ,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Java » Java泛型机制 类型自动推断 自定义泛型

JDK5.0推出的新特性:泛型,这种语法机制旨在编译阶段起作用,运行阶段没用!
优点:集合中存储的元素类型统一,从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”
缺点:集合中存储的元素缺乏多样性
不使用泛型:

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

public class GenericTest {
    public static void main(String[] args) {
        List list = new ArrayList();
        // 准备对象
        Dog d = new Dog();
        Cat c = new Cat();
        // 将对象添加到集合当中
        list.add(d);
        list.add(c);

        // 遍历集合,取出Dog吃骨头,取出Cat吃鱼
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            if (obj instanceof Dog){
                Dog dog = (Dog)obj;
                dog.eatBone();
            }else if(obj instanceof Cat){
                Cat cat = (Cat)obj;
                cat.eatFish();
            }
        }
    }

}
class Animal{ }
class Dog extends Animal{
    public void eatBone(){
        System.out.println("狗吃骨头");
    }
}
class Cat extends Animal{
    public void eatFish(){
        System.out.println("猫吃鱼");
    }
}

使用泛型:

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

public class GenericTest {
    public static void main(String[] args) {
        // 使用泛型,List集合中只允许存储Animal类型的数据
        // 用泛型来指定List集合中存储的数据类型
        List<Animal> list = new ArrayList<Animal>();
        // 准备对象
        Dog d = new Dog();
        Cat c = new Cat();
        // 将对象添加到集合当中
        list.add(d);
        list.add(c);

        // 迭代器迭代Animal类型
        Iterator<Animal> iterator = list.iterator();
        while (iterator.hasNext()){
            // 调用Animal父类的方法不需要转型
            Animal obj = iterator.next();
            // 调用子类特有的方法需要转型
            if (obj instanceof Dog){
                Dog dog = (Dog)obj;
                dog.eatBone();
            }
            if (obj instanceof Cat){
                Cat cat = (Cat)obj;
                cat.eatFish();
            }
        }
    }

}
class Animal{ }
class Dog extends Animal{
    public void eatBone(){
        System.out.println("狗吃骨头");
    }
}
class Cat extends Animal{
    public void eatFish(){
        System.out.println("猫吃鱼");
    }
}

JDK8之后引入:自动类型推断机制(钻石表达式)

public class GenericTest {
    public static void main(String[] args) {
        // ArrayList<>类型会自动推断
        List<Animal> list = new ArrayList<>();
    }
}

自定义泛型:

public class GenericTest<abc> {
    public static void main(String[] args) {
        // 创建对象的时候指定泛型 String
        GenericTest<String> gt = new GenericTest<>();
        // 参数类型String
        gt.doSome("sm");
    }

    public void doSome(abc o){
        System.out.println(o);
    }
}

自定义泛型的时候,尖括号里面可以随便写,一般写E/T都可以!

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Java泛型机制 类型自动推断 自定义泛型》 发布于2020-08-16

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

2 + 6 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册