IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java 泛型】 -> 正文阅读

[Java知识库]【Java 泛型】

作者:>

泛型类和泛型接口

package com.yuzhenc.collection;

/**
 * @author: yuzhenc
 * @date: 2022-03-07 21:39:38
 * @desc: com.yuzhenc.collection
 * @version: 1.0
 */
public class Test06 {
    public static void main(String[] args) {
        Person<String,Integer,Integer> p1 = new Person<>("sqlboy",25,1);
        Person<String,Integer,String> p2 = new Person<>("sqlgirl",25,"男");
        //p1 = p2;//4.不同泛型引用的引用类型不可以相互赋值

        Person p3 = new Person<String,Integer,Integer>("sqlboy",25,1);
        Person p4 = new Person<String,Integer,String>("sqlgirl",25,"男");
        p3 = p4;
        //不指定泛型时可以传任何类型
        Person p5 = new Person(1,2,true);
    }
}
//泛型类
//3.泛型类可以定义多个泛型参数
class Person <A,B,C> {
    A name;
    B age;
    C sex;

    public Person() {}

    public Person(A name, B age, C sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public A getName() {
        return name;
    }

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

    public B getAge() {
        return age;
    }

    public void setAge(B age) {
        this.age = age;
    }

    public C getSex() {
        return sex;
    }

    public void setSex(C sex) {
        this.sex = sex;
    }
}

/*
//int报错
//泛型参数一定是引用类型的参数
class Student extends Person <String,int,String> {

}*/
//1.继承时父类指定泛型
class Student extends Person <String,Integer,String> {

}
//2.继承时,父类不指定泛型,子类仍是泛型类
class Teacher<A,B,C> extends Person<A,B,C> {
    public Teacher() {}

    public Teacher(A name, B age, C sex) {
        super(name, age, sex);
    }

    /*
    //5.泛型类中的静态方法不能使用类的泛型
    public static void b(B b) {

    }*/
    //6.不能直接使用A[]创建数组
    public void c() {
        //C[] c = new C[10];//不可以
        C[] c = (C[])new Object[10];
    }
}

泛型方法

package com.yuzhenc.collection;

/**
 * @author: yuzhenc
 * @date: 2022-03-07 22:22:03
 * @desc: com.yuzhenc.collection
 * @version: 1.0
 */
public class Test07 {
    public static void main(String[] args) {
        System.out.println(a(true));
        System.out.println(a(1));
        System.out.println(a("sqlboy"));
        System.out.println(a(1.1));
    }
    //泛型方法
    /*
        1.什么是泛型方法:
            不是带泛型的方法就是泛型方法
            泛型方法有要求:这个方法的泛型的参数类型要和当前的类的泛型无关
            泛型方法对应的那个泛型参数类型 和  当前所在的这个类 是否是泛型类,泛型是啥  无关
        2.泛型方法定义的时候,前面要加上<T>
            原因:如果不加的话,会把T当做一种数据类型,然而代码中没有T类型那么就会报错
        3.T的类型是在调用方法的时候确定的
        4.泛型方法可以是静态方法
    */
    public static <T> T a(T t) {
        return t;
    }
}

通配符

package com.yuzhenc.collection;

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

/**
 * @author: yuzhenc
 * @date: 2022-03-07 22:31:42
 * @desc: com.yuzhenc.collection
 * @version: 1.0
 */
public class Test08 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("sqlboy");
        list.add("Hello");
        b(list);
    }

    public static void a(List<String> a) {
        for (String s : a) {
            System.out.println(s);
        }
    }
    /*
    //这里不是重载,是方法重定义,报错
    public static void a(List<Integer> a) {

    }
    */
    public static void b(List<?> b) {
        //1.遍历
        for (Object s : b) {
            System.out.println(s);
        }
        //2.数据的写入
        //b.add("sqlboy");//不能随便写入数据,报错
        b.add(null);
        //3.数据的读取
        Object o1 = b.get(0);
        Object o2 = b.get(1);
        Object o3 = b.get(2);
        System.out.println(o1);
        System.out.println(o2);
        System.out.println(o3);
    }
}

在这里插入图片描述

泛型受限

package com.yuzhenc.collection;

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

/**
 * @author: yuzhenc
 * @date: 2022-03-07 22:56:13
 * @desc: com.yuzhenc.collection
 * @version: 1.0
 */
public class Test09 {
    //这是main方法,程序的入口
    public static void main(String[] args) {
        //a,b,c三个集合是并列的关系:
        List<Object> a = new ArrayList<>();
        List<Person> b = new ArrayList<>();
        List<Student> c = new ArrayList<>();
        /*开始使用泛型受限:泛型的上限
        List<? extends Person>:
        就相当于:
        List<? extends Person>是List<Person>的父类,是List<Person的子类>的父类
         */
        List<? extends Person> list1 = null;
        //list1 = a;
        list1 = b;
        list1 = c;
        /*开始使用泛型受限:泛型的下限
        List<? super Person>
        就相当于:
        List<? super Person>是List<Person>的父类,是List<Person的父类>的父类
         */
        List<? super Person> list2 = null;
        list2 = a;
        list2 = b;
        //list3 = c;
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:14:58  更:2022-03-08 22:15:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码