首页 > 编程语言 >Java泛型

Java泛型

时间:2023-09-03 22:48:00浏览次数:29  
标签:Java String Generic list 类型 泛型 public

Java泛型

1.泛型概述

泛型的本质是为了参数化类型(即限制参数类型为我们指定泛型类型)

如这样:给list集合指定类型String

//比如给List集合指定一个泛型(String),那么存入List集合中的元素必须要是String类型
List<String> list= new ArrayList<String>();

2.泛型的优点

  • 限制变量的类型,我们的类型是安全的(编译时的类型检测)
  • 消除源码中的强制类型转换

3.泛型分类

(1)泛型类

当我们在类中操作的引入数据类型不确定时,可以根据需要自定义泛型支持的类

下面为一个定义泛型类的例子

//此处T可以写任意标识
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{
  //private 泛型标识 成员变量名  
    private T key;    
    
    public Generic(T key){
        this.key=key;
    } 
    
    public T set(){
        return null ;
    }
}

实例化泛型类

Generic<String> generic1 = new Generic<String>("Hello");
Generic<Integer> generic2 = new Generic<Integer>(123456);

(2)泛型接口

泛型接口与泛型类的定义与使用基本相同,下面为定义泛型接口和实现的例子

定义:

public interface Generic_interface<T,E> {
     //T,E为我们指定的泛型类型,此处也是返回值和参数
     public T set(T t);
     public E get(E e);
}

实现:

  • 实现泛型接口的类“没有”传入泛型实参

实例代码如下:

public class Generics<T,E> implements Generic_interface<T,E>{

    @Override
    public T set(T t) {
        return null;
    }

    @Override
    public E get(E e) {
        return null;
    }
}
  • 实现泛型接口的类“有”传入泛型实参

实例代码如下:

public class Generics<String,Integer> implements Generic_interface<String,Integer>{

    @Override
    public String set(String string) {
        return null;
    }

    @Override
    public Integer get(Integer integer) {
        return null;
    }
}

(3)泛型方法

当我们只需关心某个方法时,我们可以直接定义泛型方法

定义与实现

public class Generics{
    public static<T> void set(T[] t){
        for(T element:t){
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        Integer[] array={1,2,4};
        String[] array1={"Java","C++"};
        set(array);
        set(array1);
    }
}

4.泛型擦除

Java泛型是一种伪泛型,Java在编译期间,所有的泛型都会被擦除(类型擦除)

比如说把泛型T擦除为Object,T extends xxx擦除为限定类型xxx

例子:

List<Integer> list = new ArrayList<>();
list.add(12);
//1.编译期间直接添加会报错
//list.add("a");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//2.运行期间通过反射添加,是可以的
add.invoke(list, "kl");

System.out.println(list)

5.泛型通配符

在泛型类和泛型方法中,类型一旦确定就不能更改,但在有些情况下,我们需要指定可以操作的类型为某个类的父类和子类。这时应使用泛型通配符

  • 上界通配符

如“List<? extends Generics>”,其中的“?”代表Generics类和ta的子类

  • 下界通配符

如“List<? super Generics>”,其中的“?”代表Generics类和ta的父类

  • 无界通配符

如“List<? >”不加任何修饰,可以代表任意未知类型

标签:Java,String,Generic,list,类型,泛型,public
From: https://www.cnblogs.com/wery999/p/17675749.html

相关文章

  • 【面试题精讲】Java Stream排序的实现方式
    首发博客地址系列文章地址如何使用JavaStream进行排序在Java中,使用Stream进行排序可以通过sorted()方法来实现。sorted()方法用于对Stream中的元素进行排序操作。具体实现如下:对基本类型元素的排序:使用sorted()方法对Stream进行排序,默认是按照自然顺序进行排序。例如,对......
  • Java项目日常开发中使用BigDecimal常见问题总结
    Java项目中有计算精度要求高的场景(如金额计算)会使用BigDecimal类型来代替Double、Float。本文整理了一些日常开发中使用BigDecimal值得注意的问题和代码实例。BigDecimal初始化时入参应使用String类型例1:BigDecimalx=newBigDecimal(3.33);BigDecimaly=newBigDecima......
  • Java线程池面试题集
    以面试官视角万字解读线程池10大经典面试题!(这个链接里难的要命)线程池面试连环炮,你能抗住几题?(这个链接里比较正常)什么是线程池?为什么要使用线程池?线程池就是采用池化思想管理线程的工具。JUC为我们提供了ThreadPoolExecutor体系类来帮助我们管理线程、并行执行任务。顶级接......
  • Java智慧工地源码:进度、质量、 成本、安全尽在掌握
    智慧工地是一种崭新的工程全生命周期管理理念。智慧工地是智慧城市在建筑施工领域的延伸,是智慧城市的“基石”。随着工程信息化管理技术的发展,移动互联网、物联网、AI、大数据等新技术与施工现场业务场景深度融合,智慧工地已成为建筑工地信息化建设和创新的热点。智慧工地将更多人......
  • java语言B/S医院HIS系统【springboot】
     医院云HIS全称为基于云计算的医疗卫生信息系统(Cloud-BasedHealthcareInformationSystem),是运用云计算、大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递、处理的业务和技术平台,实现区域内医疗卫生......
  • 基于JavaWeb实现智慧菜市场系统的设计与实现程序
    作者主页:编程指南针作者简介:Java领域优质创作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路 关注作者有好处目录一,环境介绍二,项目......
  • Java垃圾回收全过程
    JVM中一次完整的垃圾回收(GC)过程。这里以HotSpot虚拟机为例,并将参考其中的一种常用的垃圾回收器:G1(Garbage-First)。堆的划分在HotSpotJVM中,堆(Heap)通常被划分为以下几个部分:年轻代(YoungGeneration):这部分进一步分为Eden区和两个Survivor区(S0和S1)。老年代(OldGeneration):存放长时间......
  • 《Java编程思想第四版》学习笔记22
    注意下面这两句话:1、针对g()和main(),Throwable类必须在违例规格中出现,因为fillInStackTrace()会生成一个Throwable对象的句柄。由于Throwable是Exception的一个基础类,所以有可能获得一个能够“掷”出的对象(具有Throwable属性),但却并非一个Exception(违例)。因此,在main()......
  • Java面试之用一个栈实现另一个栈的排序
    一题目一个栈中元素的类型为整数,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外可以申请新的变量,但不能申请额外的数据结构。如何完成排序?二要求将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。1.如果cur小于或等于hel......
  • 无涯教程-JavaScript - TTEST函数
    TTEST函数取代了Excel2010中的T.TEST函数。描述该函数返回与学生t检验相关的概率。使用TTEST来确定两个样本是否可能来自均值相同的相同两个基础总体。语法TTEST(array1,array2,tails,type)争论Argument描述Required/OptionalArray1Thefirstdataset.Required......