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

发布时间:2024年01月16日

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

1、枚举

2、泛型


枚举

枚举是一种特殊类

枚举类的格式:

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

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.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

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);
    }
}

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

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

泛型类

泛型类的定义:

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

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

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

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

在这里插入图片描述

泛型接口

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

代码:定义了泛型接口后,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) {

    }
}

泛型方法

泛型方法的定义:

代码验证

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的父类。使用案例:

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

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

总结:所谓泛型就是,泛化。定义泛型变量E,不定义具体的数据类型

文章来源:https://blog.csdn.net/abc123mma/article/details/135627814
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。