java泛型学习

人生之路坎坎坷坷,跌跌撞撞在所难免。但是,不论跌了多少次,你都必须坚强勇敢地站起来。任何时候,无论你面临着生命的何等困惑抑或经受着多少挫折,无论道路多艰难,希望变得如何渺茫,请你不要绝望,再试一次,坚持到底,成功终将属于勇不言败的你。

导读:本篇文章讲解 java泛型学习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

链接: Java 泛型.
链接: Java之泛型.

泛型的本质是类型参数化

java 中泛型标记符:

  • E – Element (在集合中使用,因为集合中存放的是元素)
  • T – Type(Java 类)
  • K – Key(键)
  • V – Value(值)
  • N – Number(数值类型)
  • ? – 表示不确定的 java 类型

泛型类

泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。

和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

  • 泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
  • 泛型的类型参数只能是类类型,不能是基本数据类型
  • 泛型类型在逻辑上可以看成是多个不同的类型,但实际上都是相同类型

从泛型类派生子类

  • 子类也是泛型类,父类和子类的泛型类型要一致
  • 子类不是泛型类,父类要明确泛型的数据类型
class Child<T> extends Father<T>
class Child extends Father<String>

使用泛型类实现API统一返回结果格式

package com.zm.controller;

import java.io.Serializable;

public class ApiResult<T> implements Serializable {

    private T data;

    private int code;

    private String msg;

    public ApiResult() {

    }

    public ApiResult(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public ApiResult<T> setData(T data) {
        this.data = data;
        return this;
    }

    public ApiResult<T> setCode(Integer code) {
        this.code = code;
        return this;
    }

    public ApiResult<T> setMsg(String msg) {
        this.msg = msg;
        return this;
    }

    /**
     * 请求成功回调
     *
     * @return
     */
    public static ApiResult<?> successMsg() {
        return new ApiResult<>().setCode(200).setMsg("ok");
    }

    /**
     * 请求成功回调
     *
     * @param t 对象参数
     */
    public static <T> ApiResult<T> successMsg(T t) {
        return new ApiResult<>(t).setCode(200).setMsg("ok");
    }

    /**
     * 请求失败回调
     *
     * @param code 状态码
     * @param msg  描述信息
     */
    public static ApiResult<?> errorMsg(int code, String msg) {
        return new ApiResult<>().setCode(code).setMsg(msg);
    }

    /**
     * 请求失败回调
     *
     * @param msg 描述信息
     */
    public static ApiResult<?> errorMsg(String msg) {
        return new ApiResult<>().setCode(500).setMsg(msg);
    }

}


泛型接口

  • 实现类不是泛型类,接口要明确数据类型
  • 实现类也是泛型类,实现类和接口的泛型类型要一致
interface 接口名称 <泛型标识,泛型标识,…> {
	泛型标识 方法名(); 
	.....
}

泛型方法

修饰符 <T,E, ...> 返回值类型 方法名(形参列表) { 方法体... }

泛型通配符

泛型通配符上限

类/接口<? extends 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的子类型

在这里插入图片描述

泛型通配符下限

类/接口<? super 实参类型>
要求该泛型的类型,只能是 实参类型 或 实参类型的父类类型

类型擦除

无限制类型擦除

在这里插入图片描述

有限制类型擦除

在这里插入图片描述

擦除方法中类型定义的参数

在这里插入图片描述

桥接方法

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133898.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!