利用有限制通配符来提升API的灵活性

在Java中,有限制通配符(bounded wildcard)允许你在泛型中指定一个范围,从而提升API的灵活性。通配符使得你能够编写更通用、适用于多种类型的代码。以下是一个利用有限制通配符提升API灵活性的例子:

假设有一个简单的动物类层次结构:

class Animal {// 省略其他属性和方法
}class Dog extends Animal {// 省略其他属性和方法
}class Cat extends Animal {// 省略其他属性和方法
}

现在,考虑一个包含动物的容器类:

import java.util.List;class AnimalContainer {// 将动物添加到容器中public void addAnimals(List<? extends Animal> animals) {// 执行添加操作}// 获取容器中的动物public void getAnimals(List<? super Animal> output) {// 执行获取操作}
}

在这个例子中,addAnimals方法使用了有限制通配符 <? extends Animal>,表示该方法可以接受任何继承自Animal的类型的列表。这使得可以将DogCat等子类的列表都传递给该方法,提高了灵活性。

getAnimals方法使用了超类型通配符 <? super Animal>,表示该方法可以接受任何Animal的超类型的列表。这意味着可以将ObjectAnimal等更泛化的类型的列表传递给该方法。

import java.util.ArrayList;
import java.util.List;public class Example {public static void main(String[] args) {AnimalContainer container = new AnimalContainer();List<Dog> dogs = new ArrayList<>();dogs.add(new Dog());dogs.add(new Dog());List<Cat> cats = new ArrayList<>();cats.add(new Cat());cats.add(new Cat());// 添加狗到容器container.addAnimals(dogs);// 添加猫到容器container.addAnimals(cats);// 获取动物到容器List<Animal> outputAnimals = new ArrayList<>();container.getAnimals(outputAnimals);// 可以将结果输出到任何 Animal 或其父类的列表中}
}

通过使用有限制通配符,AnimalContainer类的方法变得更加灵活,可以接受不同子类型的动物列表,同时也可以将动物的列表输出到更泛化的类型中。这种方式提高了API的通用性和可重用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277635.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch面试题

Elasticsearch面试题&#xff08;来源&#xff1a;Elasticsearch&#xff09; 1 、为什么要使用 Elasticsearch&#xff1f; 系统中的数据&#xff0c; 随着业务的发展&#xff0c;时间的推移&#xff0c; 将会非常多&#xff0c; 而业务中往往采用模糊查询进行数据的搜索&…

解决:Component name “index“ should always be multi-word

原因 要求组件名称以驼峰格式命名&#xff0c;自定义组件名称应该由多单纯组成&#xff0c;防止和html标签冲突&#xff0c;所以index.vue 会报错 解决 1、按照规则驼峰格式&#xff0c;如&#xff1a;appIndex.vue 2、若有.eslintrc.js文件&#xff0c;并在规则中(rules)关…

【最新版】PyCharm基础调试功能详解

文章目录 一、断点1. 断点的类型a. 行断点b. 异常断点 2. 设置断点a. 设置行断点b. 设置异常断点 3. 管理断点a. 删除断点b. 将断点静音 二、调试功能0. 测试代码1. 设置断点2. 调试的多种启动方式3. 观察调试控制台a. 步过b. 步入c. 单步执行代码d. 步出e. 运行到光标处f. 重新…

我可能是全中国最了解 tailwindcss 的开发者

我可能是全中国最了解 tailwindcss 的开发者 我可能是全中国最了解 tailwindcss 的开发者 前言 预设小工具转化器UI 组件库 开源起始上下求索 开发之始更多的平台继续突破 兴趣还是生计&#xff1f;收获和结语附录 前言 首先&#xff0c;我要对起这样的标题感到抱歉&#x…

ProroBuf C++笔记

一.什么是protobuf Protocol Buffers是Google的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法&#xff0c;它可⽤于&#xff08;数据&#xff09;通信协议、数据存储等。Protocol Buffers 类⽐于XML&#xff0c;是⼀种灵活&#xff0c;⾼效&#xff0c;⾃动化机制的结…

java综合实验-图书管理系统

二、实验项目内容&#xff08;实验题目&#xff09; 1. 使用Java编程语言进行实验。 2. 采用面向对象的思想进行系统设计。 3. 实现基本的图书管理功能&#xff0c;包括添加图书、删除图书、查询图书信息等。 4. 要求有良好的用户交互界面。 步骤参考&#xff1a; 步骤一…

访谈型软文写作方式,媒介盒子告诉你

访谈型软文一般用于维护企业形象&#xff0c;分享品牌故事。但是许多企业在写访谈型软文时经常容易跑偏或者写来写去没有逻辑&#xff0c;今天媒介盒子就来和大家分享访谈型软文的写作方式&#xff0c;看完这四点&#xff0c;小白也能写好访谈型软文&#xff01; 一、 访谈对象…

leetcode 69. x 的平方根(优质解法)

代码&#xff1a; class Solution {public int mySqrt(int x) {long left0;long rightx;while (left<right){long midleft(right-left1)/2;//注意乘法操作和加法操作都很容易发生溢出if(mid*mid<x){leftmid;}else {rightmid-1;}}return (int)left;} } 题解&#xff1a;…

全域营销趋势下,品牌如何让流量变留量?

2023年已开始倒计时。 回望过去三年&#xff0c;社媒直播电商经历了从“野蛮生长”到“有序生长”的快速发展时期。 罗永浩的“真还传”、新东方向东方甄选的转型、董洁直播出圈翻红&#xff0c;命运的齿轮在不断转动&#xff0c;新的故事在不断抒写着。 伴随着头部达人的快速更…

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

gitlab下载,离线安装

目录 1.下载 2.安装 3.配置 4.启动 5.登录 参考&#xff1a; 1.下载 根据服务器操作系统版本&#xff0c;下载对应的RPM包。 gitlab官网&#xff1a; The DevSecOps Platform | GitLab rpm包官网下载地址: gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像地…

Spring上下文之注解模块ConfigurationMethod

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…