前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java之泛型理解

java之泛型理解

作者头像
shaoshaossm
发布于 2022-12-27 06:21:55
发布于 2022-12-27 06:21:55
21300
代码可运行
举报
文章被收录于专栏:Java啊Java啊
运行总次数:0
代码可运行

泛型

  • 用泛型来指定集合中存储的数据类型

优点:

  • 集合中存储的元素类型统一
  • 从集合中取出的元素类型是泛型指定的类型,不需要大量的“向下转型”

案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class GenericTest01 {
    public static void main(String[] args) {
    /* 没有使用泛型
     List list = new ArrayList();
        Cat cat = new Cat();
        Bird bird = new Bird();
        list.add(cat);
        list.add(bird);
        Iterator iterator =list.iterator();
        while (iterator.hasNext()){
            Object object = iterator.next();
            if (object instanceof Animal){
                Animal animal = (Animal)object;
                animal.move();
            }
            if (object instanceof Bird){
                Bird bird1 = (Bird)object;
                bird1.fly();
            }else if (object instanceof Cat){
               Cat cat1 = (Cat)object;
               cat1.catchMouse();
            }
        }*/


    //使用泛型
        List<Animal> list = new ArrayList<Animal>();

        //list.add("dada"); 错误 只能存储Animal
        Cat cat = new Cat();
        Bird bird = new Bird();

        list.add(cat);
        list.add(bird);

        Iterator<Animal> iterator = list.iterator();
        while (iterator.hasNext()){
            Animal animal = iterator.next();
            //animal.move();
            if (animal instanceof Cat){
                Cat cat1 = (Cat)animal;
                cat1.catchMouse();
            }if (animal instanceof Bird){
                Bird bird1 = (Bird)animal;
                bird1.fly();
            }
        }


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

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

}
class Bird extends Animal {
    public void fly() {
        System.out.println("鸟儿在飞翔");
    }
}

类型自动推断

  • 后面的类型可以省略List<Animal> list = new ArrayList<>();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
* 自动类型推断机制 钻石表达式
* */
public class GenericTest02 {
    public static void main(String[] args) {
        List<Animal> list = new ArrayList<>();
        list.add(new Cat());
        list.add(new Bird());
        list.add(new Animal());
        Iterator<Animal> iterator = list.iterator();
        while (iterator.hasNext()){
            Animal animal = iterator.next();
            animal.move();
        }
        List<String > list1 = new ArrayList<>();
        list1.add("dadaaaaaaaaaaa");
        list1.add("abcdefghigklmn");
        Iterator<String> iterator1 = list1.iterator();
        while (iterator1.hasNext()){
            String string = iterator1.next();
            System.out.println(string+" ");
            String newString = string.substring(6);
            System.out.println(newString);

        }
    }
}

自定义泛型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package Example6;
// E 标识符 随便写
public class GenericTest03<E> {

    public void doSome(E o){

        System.out.println(o);
    }


    public static void main(String[] args) {
        //GenercicTest03<String> genercicTest03 = new GenercicTest03();
        //genercicTest03.doSome("\033[32;4m" + "123" + "\033[0m") ;
        GenericTest03<Integer> genercicTest031 = new GenericTest03<>();
        genercicTest031.doSome(1000);

       /* System.out.println("\033[30;4m" + "123" + "\033[0m");
        System.out.println("\033[31;4m" + "Hello" + "\033[0m");
        System.out.println("\033[32;4m" + "Hello" + "\033[0m");
        System.out.println("\033[33;4m" + "Hello" + "\033[0m");
        System.out.println("\033[34;4m" + "Hello" + "\033[0m");
        System.out.println("\033[35;4m" + "Hello" + "\033[0m");
        System.out.println("\033[36;4m" + "Hello" + "\033[0m");
        System.out.println("\033[37;4m" + "Hello" + "\033[0m");
        System.out.println("\033[40;31;4m" + "Hello" + "\033[0m");
        System.out.println("\033[41;32;4m" + "Hello" + "\033[0m");
        System.out.println("\033[42;33;4m" + "Hello" + "\033[0m");
        System.out.println("\033[43;34;4m" + "Hello" + "\033[0m");
        System.out.println("\033[44;35;4m" + "Hello" + "\033[0m");
        System.out.println("\033[45;36;4m" + "Hello" + "\033[0m");
        System.out.println("\033[46;37;4m" + "Hello" + "\033[0m");*/

        MyIterator<String > myIterator = new MyIterator();
        String s = myIterator.get();

        MyIterator<Animal > myIterator2 = new MyIterator();
        Animal s2 = myIterator2.get();

        GenericTest03 genercicTest032 = new GenericTest03();
        genercicTest032.doSome(new Object());
    }



}
class MyIterator<T>{
    public T get(){
        return null;
    }
}

java源代码中经常出现的是: ​ 和 E:Element单词首字母 T:Type单词首字母

视频地址:https://www.bilibili.com/video/BV1Rx411876f/index_689.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java从入门到精通九(Java泛型)
泛型是什么?我们在哪里会遇到? 比如在一些集合类里面,我们可以看到对于键值的参数化限制。作用就是指定了键值的类型。
兰舟千帆
2022/07/16
6780
Java从入门到精通九(Java泛型)
java 泛型全解 - 绝对最详细
对于java的泛型我一直属于一知半解的,平常真心用的不多。直到阅读《Effect Java》,看到很多平常不了解的用法,才下定决心,需要系统的学习,并且记录下来。
程序狗
2021/12/20
4K0
Java泛型总结
集合容器类“设计阶段/声明阶段”不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为 Object,JDK1.5 之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection<E>,List<E>,ArrayList<E>这个 <E> 就是类型参数,即泛型。
乐心湖
2021/01/18
8520
Java泛型总结
Java集合框架详述之(Collection,List,Set)
注:Collection在使用泛型之前,可存放Object的所有子类,在使用泛型之后,只能存某个具体的类型。
百思不得小赵
2022/12/01
6130
Java集合框架详述之(Collection,List,Set)
Java 泛型
本文介绍了Java中的泛型机制,主要包括泛型的定义、泛型类型的变量、泛型方法以及通配符等内容。同时,还讲解了在 Java 中如何使用泛型,以及需要注意的一些问题。
IT可乐
2018/01/04
1.6K0
Java 泛型
Java JDK1.5: 泛型 新特性的讲解说明
在任何不重要的软件项目中,错误都只是生活中的事实。 仔细的计划,编程和测试可以帮助减少他们的普遍性,但不知何故,在某个地方,他们总是会找到一种方法来进入你的代码。 随着新功能的推出以及您的代码库规模和复杂性的增加,这一点变得尤为明显。
RainbowSea
2023/02/05
9600
java之泛型
所谓泛型,就是允许自定义类,接口通过一个标识类中的某个属性的类型或者是某个方法的返回值及参数类型。
OY
2022/03/12
3700
java之泛型
JAVAEE工程师零基础学习教程之泛型类和File类
​ 在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。
用户9184480
2024/12/13
960
掌握8条泛型规则,打造优雅通用的Java代码
如果在添加对象时,不小心将不同类型的对象加入集合,那么获取对象强制转换时会发生报错
菜菜的后端私房菜
2024/07/26
811
细说java系列之泛型
简言之,范型是Java支持在编译期进行类型检查的机制。 这里面包含2层含义:其一,可以使用范型进行类型检查;其二,在编译期进行类型检查。 那么,什么叫做在编译期进行类型检查?可以在运行时进行类型检查吗?带着这些疑问,我们一步步深入范型。
编程随笔
2019/09/11
5990
细说java系列之泛型
Java - 泛型
参数化类型:把类型当作参数来传递,这意味着参数化类型不能是基本数据类型,需要用对应的包装类来代替。
雨临Lewis
2022/01/12
5770
Java泛型详解
Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx())
timerring
2023/05/07
4860
Java泛型详解
一句话,讲清楚java泛型的本质(非类型擦除)
(3)方法二报错的地方是在 System.out.println(sort2(list).getClass());这行,而不是 returnlist.toArray((T[])newComparable[list.size()]);这行;
彤哥
2019/07/08
5140
深入理解 Java 泛型
泛型要求在声明时指定实际数据类型,Java 编译器在编译时会对泛型代码做强类型检查,并在代码违反类型安全时发出告警。早发现,早治理,把隐患扼杀于摇篮,在编译时发现并修复错误所付出的代价远比在运行时小。
静默虚空
2022/03/23
4220
深入理解 Java 泛型
Java集合框架
1.集合和数组的区别 数组长度是固定的,集合长度是可变的 数组可以存储基本类型和引用类型,集合只能存储引用类型 2.Collection体系集合 List接口的特点: 有序、有下标、元素可重复 Set接口的特点: 无序、无下标、元素不能重复 2.1Collection父接口 特点:代表一组任意类型的对象,无序、无下标、不能重复 方法: boolean add(Object obj) //添加一个对象 boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中 void
用户7353950
2022/06/23
2.4K0
大数据必学Java基础(五十五):泛型深入了解
集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,
Lansonli
2022/09/28
4580
大数据必学Java基础(五十五):泛型深入了解
【Java基础】JavaCore核心-泛型技术
互联网小阿祥
2023/05/28
3720
【Java基础】JavaCore核心-泛型技术
【Java】解决Java报错:ClassCastException
在Java编程中,ClassCastException 是一种常见的运行时异常,通常发生在试图将一个对象强制转换为不兼容的类型时。这类错误提示为:“ClassCastException: [ClassA] cannot be cast to [ClassB]”,意味着你试图将一个对象从一个类型转换为不兼容的另一个类型。本文将详细探讨ClassCastException的成因、解决方案以及预防措施,帮助开发者理解和避免此类问题,从而提高代码的健壮性和可靠性。
E绵绵
2024/06/09
2060
Java泛型入门介绍--自定义泛型类\方法\通配符的问题
下面的这个只展示了我们的main方法里面的内容,实际上这个java文件里面还进行了这个cat,dog类的定义,我们想要对于这个狗的名字进行打印,然后加上这个狗的年龄;
阑梦清川
2025/02/24
450
Java泛型入门介绍--自定义泛型类\方法\通配符的问题
Java程序设计(高级及专题)- 泛型/容器(集合框架)
JAVA集合框架:java中用来表示集合,和操作集合的所有类库的统称 JAVA中的集合从大方向分有两种:Collection 集合,Map 集合,它们都继承自Object
全栈程序员站长
2022/08/04
5280
Java程序设计(高级及专题)- 泛型/容器(集合框架)
相关推荐
Java从入门到精通九(Java泛型)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验