首页 > 编程语言 >java基础-泛型(七)

java基础-泛型(七)

时间:2023-04-23 13:38:25浏览次数:33  
标签:java show 数据类型 void 基础 泛型 obj public


泛型:jdk1.5版本以后出现的一个安全机制。表现格式:< >

好处:

1:将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题。

2:避免了强制转换的麻烦。

 

只要带有<>的类或者接口,都属于带有类型参数的类或者接口,在使用这些类或者接口时,必须给<>中传递一个具体的引用数据类型。

 

泛型技术:其实应用在编译时期,是给编译器使用的技术,到了运行时期,泛型就不存在了。

为什么? 因为泛型的擦除:也就是说,编辑器检查了泛型的类型正确后,在生成的类文件中是没有泛型的。

在运行时,如何知道获取的元素类型而不用强转呢?

泛型的补偿:因为存储的时候,类型已经确定了是同一个类型的元素,所以在运行时,只要获取到该元素的类型,在内部进行一次转换即可,所以使用者不用再做转换动作了。

 

什么时候用泛型类呢?

当类中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。用的是引用数据类型,不能用基本数据类型

 

不用泛型,也可以用object接收 ,但是用object接收  需要强制转换,用泛型,这个更安全,泛型类 把运行时的报错,转移到了编译时期,泛型类,通过参数传递进来,例如定义个工具类操作的是对象,但是不知道操作啥对象,就先定一个参数,后期传递进来啥对象,就用啥对象

在jdk1.5 以后,使用泛型来接收类中要操作的引用数据类型,泛型类,什么时候用,当类中的操作引用数据类型不确定的时候,就用泛型来表示

 

泛型在程序定义上的体现:

//泛型类:将泛型定义在类上。
class Tool<Q> {
    private Q obj;
    public  void setObject(Q obj) {
        this.obj = obj;
    }
    public Q getObject() {
        return obj;
    }
}
 
//当方法操作的引用数据类型不确定的时候,可以将泛型定义在方法上。
    public <W> void method(W w) {
        System.out.println("method:"+w);
    }
//静态方法上的泛型:静态方法无法访问类上定义的泛型。如果静态方法操作的引用数据类型不确定的时候,必须要将泛型定义在方法上。
    public static <Q> void function(Q t) {
        System.out.println("function:"+t);
    }
//泛型接口.
interface Inter<T> {
    void show(T t);
}
class InterImpl<R> implements Inter<R> {
    public void show(R r) {
        System.out.println("show:"+r);
    }
}
class InterImpl implements Inter<String>
{
public void show(String str)
{
System.out.println("show+"+str);
}
}

标签:java,show,数据类型,void,基础,泛型,obj,public
From: https://blog.51cto.com/u_16084838/6217448

相关文章

  • java基础-面向对象-多态(四)
    某一个事务不同的体现形态例如:人:男人、女人动物:猫、狗猫x=new猫();动物x=new猫();1、多态的体现父类的引用指向了自己的子类对象父类的引用也可以接受自己的子类对象2、多态的前提必须是类与类之间有关系,要么继承、要么实现,通常还有一个前提,存在覆盖3、多态的好处多态的出现大大......
  • java基础-面向对象-继承(三)
    This  Super  继承的时候出现的两个关键字,final(不让复写方法)  abstract (必须复写方法)interface(修饰类)  implement继承好处:提高代码的复用性, 让类与类之间产生了关系,提供了另一个特征多态的前提父类的由来,其实是由多个类不断向上抽取共性内容而来的java来说,继承是单......
  • java基础-异常处理(六)
    异常处理,出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。--------java.lang.Throwable:Throwable:可抛出的。   |--Error:错......
  • Java SpringBoot 7z 压缩、解压
    JavaSpringBoot7z压缩、解压JavaSpringBoot7z压缩、解压cmd7z文件压缩7z压缩测试添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</versi......
  • Tailscale 基础教程:部署私有 DERP 中继服务器(转)
    Sealos 在云桌面中管理Kubernetes集群生命周期,运行分布式应用程序 走,看看去!上篇文章介绍了如何使用 Headscale 替代Tailscale官方的控制服务器,并接入各个平台的客户端。本文将会介绍如何让Tailscale使用自定义的DERPServers。可能很多人都不知道 DERP 是个啥玩意......
  • jackson将java对象转换为json字符串
    1.1. 下载jacksonJackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。下载地址:http://jackson.codehaus.org/1......
  • Openharmony应用NAPI详解--基础篇
    NAPI是什么?​ 简单点理解就是在Openharmony里,实现上层js或ets应用与底层C/C++之间交互的框架。​ Openharmony里的官方解释:NAPI(NativeAPI)组件是一套对外接口基于Node.jsN-API规范开发的原生模块扩展开发框架。还有NAPI适合封装IO、CPU密集型、OS底层等能力并对外暴露JS接口,通过......
  • 力扣844(Java)-比较含退格的字符串(简单)
    题目:给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。 示例1:输入:s="ab#c",t="ad#c"输出:true解释:s和t都会变成"ac"。示例2:输入:s="ab##",t="c#d#"输出:true......
  • java:文件写入BufferedOutputStream写入字节和PrintWriter写入字符
    BufferedOutputStream和FileOutputStream写入二进制字节方法定义publicBufferedOutputStream(OutputStreamout){示例BufferedOutputStreamwriter=newBufferedOutputStream(newFileOutputStream("demo.txt"));writer.write("helloworld".getBytes());w......
  • Openharmony的编译构建--基础篇
    一、编译构建简介​ Openharmony的编译构建流程在鸿蒙的开源版本中以V3.1为分界线,流程略有变化。但其中都是ninja与python通过配置文件json,调用不同的交叉工具链来对源码进行编译,然后生成镜像文件。本文首先以OpenharmonyV3.1版本为例讲解下其编译构建的过程,并以实例的方式对如何......