java中泛型

文章目录

泛型的概述
1.Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
2.早期的时候,使用Object来代表任意类型。但是这样在向上转型的是没有问题的,但是在向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。所以Java在JDK5之后提供了泛型来解决这个问题
3.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
4.泛型是一种把类型的明确工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。

注意:类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)

泛型可用使用在方法、接口、类分别称作为:泛型类、泛型方法、泛型接口。

泛型类

格式:修饰符class类名<类型>{}

范例:public class Xd<T>{}

此处T可以随便写为任意标识,T、E、K、V等形式的参数常用于表示泛型

java 复制代码
package com.xd;

public class Xd<T> {

    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }


    public T view(T t){
        return t;
    }



}

泛型方法

格式:修饰符<类型>返回值类型 方法名(类型 变量名){...}

范例:public<T> void view(T t){...}

java 复制代码
package com.xd;

public class Xd {

    /**
     * public 修饰符
     * <T> 该方法使用泛型T
     * void 返回值
     * 方法的名称
     * 参数列表(T t)
     *
     */
    public <T>  T view(T t) {
        return t;
    }

}

泛型接口

格式:修饰符 interface 接口名<类型>{...}

范例:public interface Xd <T>{...}

java 复制代码
package com.xd;

public interface XdInterface<T> {

    T view(T t);

}
java 复制代码
package com.xd;

public class XdImpl<T> implements XdInterface<T> {
    @Override
    public T view(T t) {
        return t;
    }
}
java 复制代码
package com.xd;

public class Test01 {
    public static void main(String[] args) {
        XdImpl<String> stringXd = new XdImpl<>();
        String view = stringXd.view("1");
        System.out.println(view);
    }
}

类型通配符

1.类型通配符<?> 一般用于接受使用,不能够做添加

2.List<?>:表示元素类型未知的list,它的元素可以匹配任何类型

3.带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中

4.类型通配符上限:<? extends类型>List<?extends Xd>:它表示的类型是Xd或者子类

5.类型通配符下限:<? super 类型>List<?super Xd>:它表示的类型是Xd或者其父类型

可变参数

可变参数 又称 参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了。

格式:修饰符 返回值类型 方法名(数据类型... 量名){}

范例:public static int sum(int... a){}

可变参数 注意事项:

这里的可变参数变量其实是一个数组

如果一个方法有多个参数,包含可变参数,可变参数要放在最后

xjad工具

相关推荐
mit6.8242 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
诸神缄默不语2 小时前
Maven用户设置文件(settings.xml)配置指南
xml·java·maven
任子菲阳2 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
学Linux的语莫2 小时前
机器学习数据处理
java·算法·机器学习
找不到、了2 小时前
JVM的即时编译JIT的介绍
java·jvm
西瓜er3 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
你总是一副不开心的样子(´ . .̫ .3 小时前
一、十天速通Java面试(第三天)
java·面试·职场和发展·java面试
迎風吹頭髮3 小时前
UNIX下C语言编程与实践63-UNIX 并发 Socket 编程:非阻塞套接字与轮询模型
java·c语言·unix
我是华为OD~HR~栗栗呀3 小时前
23届考研-Java面经(华为OD)
java·c++·python·华为od·华为·面试
Javatutouhouduan4 小时前
Java程序员如何深入学习JVM底层原理?
java·jvm·java面试·后端开发·java架构师·java程序员·互联网大厂