Java重修第八天—枚举和泛型

这篇具有很好参考价值的文章主要介绍了Java重修第八天—枚举和泛型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通过学习本篇文章可以掌握如下知识

1、枚举

2、泛型


枚举

枚举是一种特殊类

枚举类的格式:

Java重修第八天—枚举和泛型,Java,java,开发语言

为什么说枚举是一个特殊类,定义一个简单的枚举如下:

public enum A {
    // 注意:枚举类的第一行必须罗列枚举对象名称
    X,Y,Z;
    // 其他行可以写类相关的数据
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

将其编译成class文件后,使用IDEA打开,结果如下:可以看出枚举类A有私有构造器。

Java重修第八天—枚举和泛型,Java,java,开发语言

  • 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
  • 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。
  • 枚举都是最终类,不可以被继承。
  • 枚举类中,从第二行开始,可以定义类的其他各种成员。
  • 编译器为枚举类新增了几个方法,并且枚举类都是继承: java.lang.Enum类的,从enum类也会继承到一些方法。

代码验证

public class Test {
    public static void main(String[] args) {
        A a1 = A.X;
        System.out.println(a1.name());  //  X

        // 枚举类特供的额外API
        A[] a = A.values();
        A z = A.valueOf("Z");
        System.out.println(z.name());   // Z
        System.out.println(z.ordinal()); // 2
    }
}

泛型

定义类、接口、方法时,同时声明了一个或者多个类型变量(如:) ,称为泛型类、泛型接口、泛型方法,它们统称为泛型。

例如ArrayList

Java重修第八天—枚举和泛型,Java,java,开发语言

public class Test {
    public static void main(String[] args) {
        // 泛型用来确定数组中参数内容。
        ArrayList<String> list = new ArrayList<>();
        list.add("java1");
        list.add("java2");
        list.add("java3");

        list.forEach(System.out::println);// 不仅仅可以装入String,也可以装入Integer,这里就体现出了“泛”的泛化含义。
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list2.add(4);

        list2.forEach(System.out::println);
    }
}

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

泛型的本质: 把具体的数据类型作为参数传给类型变量

泛型类

泛型类的定义:

Java重修第八天—枚举和泛型,Java,java,开发语言

代码演示:这里仅仅是说明泛型类的定义,不用关注具体的方法实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其次注意extend的用法:定义一个泛型类MyClass

表明MyClass3中只能接受Animal及其子类,如果是其他类型就会报错

Java重修第八天—枚举和泛型,Java,java,开发语言

泛型接口

泛型接口与泛型类比较类似,相对简单。

Java重修第八天—枚举和泛型,Java,java,开发语言

代码:定义了泛型接口后,Student类实现泛型后,就可以处理Student类型数据;Teacher类实现泛型后,就可以处理Teacher类型数据。

public interface Data<T> {
    void add(T t);
}


public class Student implements Data<Student>{
    @Override
    public void add(Student student) {
        
    }
}

public class Teacher implements Data<Teacher>{
    @Override
    public void add(Teacher teacher) {

    }
}

泛型方法

泛型方法的定义:

Java重修第八天—枚举和泛型,Java,java,开发语言

代码验证

public class Test {
    public static void main(String[] args) {
        String t = test("3");
        System.out.println(t);
    }

    // 第一个<T> 表示泛型标识
    // 第二个T 表示返回值,
    // 第三个T表示输入参数的类型
    public static <T> T test(T t){
        return t;
    }
}

此外 ”?“表示:在使用泛型的时候可以代表一切类型

之前我们讲过extends ,因此可以使用 <? extends Car> 代表只能接受 Car于Car的子类。

此外还有<? super Car> 表示Car或者Car的父类。使用案例:

Java重修第八天—枚举和泛型,Java,java,开发语言

注意:泛型仅仅支持引用数据类型,不支持基本数据类型。

总结:所谓泛型就是,泛化。定义泛型变量E,不定义具体的数据类型文章来源地址https://www.toymoban.com/news/detail-799322.html

到了这里,关于Java重修第八天—枚举和泛型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java面向对象(内部类)(枚举)(泛型)

    内部类 内部类是五大成员之一(成员变量、方法、构造方法、代码块、 内部类 ); 一个类定义在另一个类的内部,就叫做内部类; 当一个类的内部,包含一个完整的事物,且这个事务不必单独设计,就可以把这个事务设计为内部类; 内部类的四种形式: 成员内部类; 静

    2024年02月13日
    浏览(37)
  • 【java】【面对对象高级4】内部类、枚举、泛型

    目录 1、内部类 1.1 成员内部类【了解】 1.1.1 定义  1.1.2 扩展变量 1.2 静态内部类【了解】 1.2.1 定义  1.2.2 扩展变量 1.3 局部内部类【了解】 1.4 匿名内部类【重点】 1.4.1 定义  1.4.1.1 常规写法 1.4.1.2 匿名内部类改造  1.4.2 匿名内部类的常见使用场景 1.4.2.1 作为一个参数传输

    2024年02月15日
    浏览(33)
  • 泛型类和泛型类是并列的关系

    2024年02月05日
    浏览(189)
  • 31 C++ 模版和泛型

    我们先来看一类问题,如下的三个方法能否换成一个方法呢? 这就是模版的来历。 所谓泛型编程,是以独立于 任何 特定类型的方式编写代码 这意味着,我们在声明或者定义的时候,不会指定具体的类型。 但是在使用的时候,需要指定具体的类型或者值 模版是泛型编程的基

    2024年02月02日
    浏览(41)
  • go语言的反射和泛型

    反射可以在程序的运行时获取变量的各种信息。Go语言中光反射在 reflect 包下。 http://c.biancheng.net/view/4407.html Go语言中通过 断言 转化为指定类型。 但是这并不具有通用性,通过断言的判断必须是已有定义的类型,未定义的就不可用,因此没有通用性。泛型就是来解决这一问题

    2024年02月10日
    浏览(47)
  • 【Rust】——提取函数消除重复代码和泛型

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年03月26日
    浏览(65)
  • Armadillo:矩阵类、向量类、Cube类和泛型类

    密集矩阵的类,其元素按列优先顺序存储(即逐列) 根矩阵类是 Mattype ,其中 type 是以下项之一: float 、 double 、 std::complexfloat 、 std::complexdoubleshort 、 int 、 long 和无符号的 short 、 int 、 long 为方便起见,定义了以下 typedef: 在本文档中,为了方便起见,使用了垫子类型;

    2024年04月15日
    浏览(41)
  • 从vue小白到高手,从一个内容管理网站开始实战开发第八天,登录功能后台功能设计--业务逻辑层基础接口和基础服务实现

    上一篇我们介绍了项目后续要使用到的工具类,关于工具类的创建可以查看 从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类-CSDN博客 文章浏览阅读2次。本次内容主要介绍了项目后续用到的部分工具类,这些

    2024年01月22日
    浏览(44)
  • Java重修第九天—Lambda 表达式和Stream

    通过学习本篇文章可以掌握如下知识 Lambda 表达式 Stream Lambda表达式是JDK 8开始新增的一种语法形式;作用: 用于简化 函数式接口 匿名内部类的代码写法 函数式接口:首先是接口,其次是只有一个抽象方法。 代码实现 java中Comparator就是一个函数式接口,可以使用lambda进行简

    2024年01月22日
    浏览(46)
  • C++、STL标准模板库和泛型编程 ——适配器、补充(侯捷)

    侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C++ 面向对象高级开发 1、C++面向对象高级编程(上) 2、C++面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C++ 设计模式 四、C++ 新标准 五、

    2023年04月27日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包