目录
为什么仿制药很有用
仿制药的工作原理
关键好处
通用类型
类型擦除
仿制药中的通配符
首页 Java java教程 Java中仿制药的概念是什么?

Java中仿制药的概念是什么?

Sep 26, 2025 am 05:19 AM
java 泛型

Java中的仿制药提供了编译时类型的安全性,并通过允许类,接口和方法在类型参数上操作来消除铸造的需求;例如,使用List 确保只能添加​​字符串,从而阻止运行时ClassCastExceptions;通过类型参数(例如)启用可重复使用的代码,例如可以容纳任何类型的box 类,仿制药可以通过类型参数进行工作;关键好处包括类型安全性,无铸件和代码可重复性;常见的通用收集包括列表,set ,map 和队列;有限类型参数(例如将类型限制到给定类的子类别;类型Erasure在运行时删除了通用类型信息以进行向后兼容,含义List 和List 成为相同的原始类型;通配符,和允许灵活的亚型,例如接受方法参数中的任何数字列表。

Java中仿制药的概念是什么?

Java中的仿制药是一项功能,它允许您编写可以与不同数据类型一起使用的同时提供编译时类型安全性的类,接口和方法。它使您可以使用占位符(类型参数)为其将要使用的数据类型定义类或方法,这些数据类型是在使用类或方法时指定的。

Java中仿制药的概念是什么?

为什么仿制药很有用

在Java 5中引入仿制药之前,像ArrayList这样的集合可以容纳任何类型的对象。这种灵活性是有代价的:您必须在检索它们时手动施放对象,并且没有编译时间检查以确保键入一致性。例如:

列表list = new ArrayList();
list.add(“ Hello”);
字符串s =(string)list.get(0); //需要铸造

如果添加了错误的类型(例如Integer ),则可能在运行时发生ClassCastException

Java中仿制药的概念是什么?

使用仿制药,您可以指定集合应保留的类型:

 List <String> list = new ArrayList <>();
list.add(“ Hello”);
字符串s = list.get(0); //无需铸造

现在,编译器可确保只能添加String对象,并且您可以在不明确铸造的情况下获得类型的安全性。

Java中仿制药的概念是什么?

仿制药的工作原理

您可以使用Angle Brackets <T>定义通用,其中T代表“类型”(但您可以使用任何有效的标识符)。例如:

公共班级框<t> {
    私人t值;

    公共void set(t value){
        this.value = value;
    }

    public t get(){
        返回值;
    }
}

在这里, T是类型参数。创建一个Box时,您指定实际类型:

 box <string> stringbox = new box <>();
StringBox.Set(“ Hello”);

box <integer> intbox = new Box <>();
intbox.set(42);

关键好处

  • 类型安全:错误在编译时间而不是运行时捕获。
  • 消除铸件:检索物体时无需铸造。
  • 代码可重复性:一个通用类可以与多种类型一起使用。

通用类型

Java的收藏框架大量使用了仿制药:

  • List<T>
  • Set<T>
  • Map<K, V>
  • Queue<T>

您还可以使用有限类型参数来限制可以使用的类型:

 public <t扩展数字> double sum(t a,t b){
    返回a.doubleValue()b.doubleValue();
}

此方法仅接受Number子类的类型。

类型擦除

仿制药背后的一个重要概念是类型擦除。在汇编过程中,删除通用类型信息(删除),并替换为原始类型(例如, Object或绑定类型)。这意味着在运行时, List<String>List<Integer>都成为纯List 。这是用于与较旧的Java版本的向后兼容。

例如:

 List <string> strings = new ArrayList <>();
列表<integer> ints = new ArrayList <>();

system.out.println(strings.getClass()== ints.getClass()); // 真的

这也意味着您不能直接实例化通用类型:

公共类容器<t> {
    // t item = new T(); //不允许 - 在运行时删除t
}

仿制药中的通配符

仿制药支持通配符( ? )允许灵活的亚型:

  • <?> - 未知类型
  • <? extends T> - TT的任何类型
  • <? super T> - t或T的任何类型TT的超类

例子:

 public static void printnumbers(list <?扩展数字>列表){
    对于(数字n:list){
        system.out.println(n);
    }
}

此方法可以接受List<integer></integer>List<double></double> ,等等。

基本上,仿制药通过让您编写灵活但类型的安全组件来使您的代码更安全,更清洁和更重复使用。

以上是Java中仿制药的概念是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

如何在Java中创建文件 如何在Java中创建文件 Sep 21, 2025 am 03:54 AM

UseFile.createNewFile()tocreateafileonlyifitdoesn’texist,avoidingoverwriting;2.PreferFiles.createFile()fromNIO.2formodern,safefilecreationthatfailsifthefileexists;3.UseFileWriterorPrintWriterwhencreatingandimmediatelywritingcontent,withFileWriterover

文件夹在哪里找 文件夹在哪里找 Sep 20, 2025 am 07:57 AM

最直接的方法是回忆保存位置,通常在桌面、文档、下载等文件夹;若找不到,可使用系统搜索功能。文件“失踪”多因保存路径未留意、名称记忆偏差、文件被隐藏或云同步问题。高效管理建议:按项目、时间、类型分类,善用快速访问,定期清理归档,并规范命名。Windows通过文件资源管理器和任务栏搜索查找,macOS则依赖访达和聚焦搜索(Spotlight),后者更智能高效。掌握工具并养成良好习惯是关键。

如何在Java中的类Path中添加JAR文件? 如何在Java中的类Path中添加JAR文件? Sep 21, 2025 am 05:09 AM

使用-cp参数可将JAR加入类路径,使JVM能加载其内类与资源,如java-cplibrary.jarcom.example.Main,支持多JAR用分号或冒号分隔,也可通过CLASSPATH环境变量或MANIFEST.MF配置。

Google Chrome无法加载此页面 Google Chrome无法加载此页面 Sep 20, 2025 am 03:51 AM

首先检查网络连接是否正常,若其他网站也无法打开则问题在网络;1.清除浏览器缓存和Cookies,进入Chrome设置选择清除浏览数据;2.关闭扩展程序,可通过无痕模式测试是否因插件冲突导致;3.检查并关闭代理或VPN设置,避免网络连接被拦截;4.重置Chrome网络设置,恢复默认配置;5.更新或重装Chrome至最新版本以解决兼容性问题;6.使用其他浏览器对比测试,确认问题是否仅限Chrome;根据错误提示如ERR_CONNECTION_TIMED_OUT或ERR_SSL_PROTOCOL_ER

了解Java仿制药和通配符 了解Java仿制药和通配符 Sep 20, 2025 am 01:58 AM

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

为什么实时系统需要确定性响应保障? 为什么实时系统需要确定性响应保障? Sep 22, 2025 pm 04:03 PM

实时系统需确定性响应,因正确性依赖结果交付时间;硬实时系统要求严格截止期限,错过将致灾难,软实时则允许偶尔延迟;非确定性因素如调度、中断、缓存、内存管理等影响时序;构建方案包括选用RTOS、WCET分析、资源管理、硬件优化及严格测试。

UC浏览器如何强制缩放网页_UC浏览器网页强制缩放功能使用技巧 UC浏览器如何强制缩放网页_UC浏览器网页强制缩放功能使用技巧 Sep 24, 2025 pm 04:54 PM

首先启用UC浏览器内置缩放功能,进入设置→浏览设置→字体与排版或页面缩放,选择预设比例或自定义百分比;其次可通过双指张开或捏合手势强制调整页面显示大小;对于限制缩放的网页,可请求桌面版网站以解除限制;高级用户还可通过在地址栏执行JavaScript代码修改viewport属性,实现更灵活的强制缩放效果。

如何在Java中使用通配符(?扩展t)的仿制药? 如何在Java中使用通配符(?扩展t)的仿制药? Sep 20, 2025 am 02:47 AM

?extendsT表示“未知的T子类型”,用于泛型中实现只读操作,允许接受T或其任意子类的集合,适用于读取数据但不写入的场景,如List

See all articles