泛型的相关内容

首先我们来了解一下什么是泛型,泛型的作用又是什么。

泛型的形式是

ArrayList<Object> objects = new ArrayList<>();

这里的<Object>这个就是泛型,添加泛型的作用又是什么呢,它可以限制添加对象的类型,比如AarryLsit<Object>则ArrayList只能存放Object类型的元素,这个好处是什么,当我们设置泛型时可以避免一些传入对象类型不对的情况,接下来我们示范一些实际案例:

要求ArraryList当中的元素必须是Person

首先我们来看一下没有有定义泛型的情况:

import java.util.ArrayList;

public class Array {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Preson("jack", 18));
        arrayList.add(new Preson("monkey", 18));
        arrayList.add(new Cat("mack", 23));
        System.out.println(arrayList);
    }
}

class Preson{
    public String name;
    public int age;

    public Preson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Preson{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

class Cat{
    public String name;
    public int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

我们发现添加Cat类型的对象也是可以添加上去的,这里就不符合我们添加对象的限制,当我们

添加一下泛型时看一下是否能限制不符合要求对象的加入。

这里我们发现当我们添加泛型之后我们发现当我们想添加Cat类型的对象的时候我们发现该语句报错了,这就是泛型的作用。

泛型的作用也不止于此,它还可以应用在方法当中,即泛型方法:

class Person<E> {
        
        public Person(E s) {//E 也可以是参数类型
        this.s = s;
        }
}
这里就是我们的泛型类和泛型构造器,E是通过你传入的对象类型自动进行替换如果传入的是String类型则这个E就是String类型,依次类推;
public E f() {// 返回类型使用 E
        return s;
}
public class Array {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Dog1<String> wc = new Dog1<>("旺财");
        System.out.println(wc.f());
    }
}
class Dog1<E>{
    public E s;

    public Dog1(E s) {
        this.s = s;
    }

    public E f(){
        return s;
    }
}
这里我们发现E类型就变成了String类型。
当我们没有定义泛型时默认E为Object类型,而且泛型最好不要与静态属性定义在一块,因为二者是冲突的,没有确定E类型的时候是无法进行初始化的,泛型的定义不是一定要用E来表示也可以是其他的比如T,S,P等等,泛型的定义必须是引用类型,基本数据类型无法定义泛型。
泛型可以定义多个比如:
class Tiger<S, T, M>{
        String name;
        S s;
        T t;
        M m;
泛型的使用范围很广,可以定义属性,返回类型,数组(泛型定义的数组,不能进行初始化,因为类型不确定,所以无法开辟空间),接口等等,泛型一旦被定义一个固定的引用类型,即可传入本类或者其子类的类型。
接下来我们看一个泛型的实例演示:
题目要求:
代码展示:
import java.util.ArrayList;
import java.util.Comparator;

public class inclass {
    public static void main(String[] args) {
        @SuppressWarnings({"all"})
        ArrayList<Employees> employees = new ArrayList<>();
        employees.add(new Employees("zzh", 50000, new MyData(2003, 9, 21)));
        employees.add(new Employees("hsx", 30000, new MyData(2002, 10, 11)));
        employees.add(new Employees("ksx", 30000, new MyData(2002, 10, 11)));
        System.out.println(employees);
        System.out.println("=====排序后的结果");
        employees.sort(new Comparator<Employees>() {
            @SuppressWarnings({"all"})
            @Override
            public int compare(Employees emp1, Employees emp2) {
                if (!(emp1 instanceof Employees && emp2 instanceof Employees)) {
                    return 0;
                }
                //是否为Employees类或者子类如果不是则返回0退出比较
                int i = emp1.getName().compareTo(emp2.getName());
                if (i != 0){
                    return i;
                }
                //比较姓名的字符大小
                int year = emp1.getMydata().getYear() - emp2.getMydata().getYear();
                if (year != 0){
                    return year;
                }
                //在姓名相同的情况下比较年份大小
                int monuth = emp1.getMydata().getMonuth() - emp2.getMydata().getMonuth();
                if (monuth != 0){
                    return monuth;
                }
                //在前两者都相同的情况下比较月份大小
                return emp1.getMydata().getDay() - emp2.getMydata().getDay();
                //前三者都相同的话再进行天数的判断
            }
        });
        System.out.println(employees);

    }
}


class Employees{
    private String name;
    private int dale;
    private MyData mydata;

    public Employees(String name, int dale, MyData mydata) {
        this.name = name;
        this.dale = dale;
        this.mydata = mydata;
    }

    public String getName() {
        return name;
    }

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

    public int getDale() {
        return dale;
    }

    public void setDale(int dale) {
        this.dale = dale;
    }

    public MyData getMydata() {
        return mydata;
    }

    public void setMydata(MyData mydata) {
        this.mydata = mydata;
    }

    @Override
    public String toString() {
        return "Employees{" +
                "name='" + name + '\'' +
                ", dale=" + dale +
                ", mydata=" + mydata +
                '}';
    }
}

class MyData{
    private int year;
    private int monuth;
    private int day;

    public MyData(int year, int monuth, int day) {
        this.day = day;
        this.monuth = monuth;
        this.year = year;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getMonuth() {
        return monuth;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setMonuth(int monuth) {
        this.monuth = monuth;
    }

    @Override
    public String toString() {
        return "MyData{" +
                "year=" + year +
                ", monuth=" + monuth +
                ", day=" + day +
                '}';
    }
}

泛型的相关内容我们就聊到这里。

      

相关推荐

  1. 对于学习

    2023-12-16 05:16:03       21 阅读
  2. typescript 中

    2023-12-16 05:16:03       13 阅读
  3. Dart语言

    2023-12-16 05:16:03       8 阅读
  4. <span style='color:red;'>泛</span><span style='color:red;'>型</span>..

    ..

    2023-12-16 05:16:03      33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 05:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 05:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 05:16:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 05:16:03       20 阅读

热门阅读

  1. cfa一级考生复习经验分享系列(五)

    2023-12-16 05:16:03       40 阅读
  2. 《小聪明》

    2023-12-16 05:16:03       34 阅读
  3. facebook广告怎么降低预算优化效果

    2023-12-16 05:16:03       39 阅读
  4. C# TcpIpSocketSever

    2023-12-16 05:16:03       28 阅读
  5. uniapp腾讯地图路线规划

    2023-12-16 05:16:03       41 阅读