Java 可变参数机制

news/2025/11/16 17:02:02/文章来源:https://www.cnblogs.com/SutsuharaYuki/p/19228483

基本语法和使用

1. 基本语法

public class VarargsExample {// 可变参数声明:类型... 参数名public static int sum(int... numbers) {int total = 0;for (int num : numbers) {total += num;}return total;}// 可变参数必须放在最后public static void printInfo(String message, int... values) {System.out.print(message + ": ");for (int val : values) {System.out.print(val + " ");}System.out.println();}public static void main(String[] args) {// 多种调用方式System.out.println(sum(1, 2, 3));        // 6System.out.println(sum(1, 2, 3, 4, 5)); // 15System.out.println(sum());               // 0 - 空参数System.out.println(sum(10));             // 10 - 单个参数// 也可以传递数组int[] arr = {1, 2, 3};System.out.println(sum(arr));            // 6printInfo("数值", 1, 2, 3, 4);}
}

2. 编译器的处理

// 编译前
public void method(String... args)
// 编译后等价于
public void method(String[] args)

实际应用场景分析

  1. 工具类和辅助方法 - 提供简洁的API

  2. 日志和格式化 - 参数数量变化大

  3. 测试代码 - 可读性和便利性更重要

  4. 配置和构建器 - 灵活的调用方式

现代Java的改进

1. 结合Stream API

public class ModernVarargs {// 可变参数 + Stream = 强大组合
    @SafeVarargspublic static <T> List<T> mergeLists(List<T>... lists) {return Arrays.stream(lists).flatMap(List::stream).collect(Collectors.toList());}// 处理null安全的可变参数public static <T> void printValues(T... values) {Arrays.stream(values).filter(Objects::nonNull).forEach(System.out::println);}
}// 使用记录类(Java 16+)
record Point(int x, int y) {// 可变参数构造器public static Point of(int... coordinates) {return coordinates.length >= 2 ? new Point(coordinates[0], coordinates[1]) : new Point(0, 0);}
}

2. 与容器API的互操作

可以使用传容器传参的方式代替

public class Interoperability {// 最佳实践:同时提供两种版本public static class ApiDesign {// 可变参数版本 - 方便调用public static void execute(Runnable... tasks) {execute(Arrays.asList(tasks));}// 容器版本 - 性能更好public static void execute(List<Runnable> tasks) {tasks.forEach(Runnable::run);}}public static void demo() {// 根据情况选择合适的方法Runnable task1 = () -> System.out.println("Task 1");Runnable task2 = () -> System.out.println("Task 2");// 少量固定任务 - 使用可变参数
        ApiDesign.execute(task1, task2);// 动态生成的任务列表 - 使用容器List<Runnable> dynamicTasks = generateTasks();ApiDesign.execute(dynamicTasks);}
}

性能考虑

可变参数会创建数组,在热点代码中可能有影响
每次调用都会创建新数组

对于性能敏感的场景,考虑重载方法
 
 
 

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

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

相关文章

11 月 3 日

项目核心信息链接信息类型 链接地址 备注说明 团队博客(阶段计划) https://www.cnblogs.com/zq-zgcai/p/19191312 含 Alpha 阶段目标、分工及风险管控 Github 代码仓库 https://github.com/hotfixMyLife/House-Renta…

002 vue3-admin项目的目录及文件说明之src目录及其子目录、子文件

整体目录结构src/ ├── api/ # API 接口相关 ├── assets/ # 静态资源 ├── components/ # 通用组件 ├── composables/ # 组合式函数 ├── constants/ …

全国性搬家公司推荐榜:从运费优势、专业度、靠谱口碑、费用便宜划算等综合实力排名

在搬家需求日益多元化的当下,选择一家综合实力过硬的搬家公司成为不少消费者的难题。本推荐榜聚焦运费优势、专业服务、省心口碑、费用性价比四大核心维度,对全国性搬家公司平台进行综合评估。最终精选出6家表现突出…

C# 高级类型 Dictionary(学习笔记4)

key-value方式,key不可以重复,value可以。namespace WindowsFormsApp1 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private static Dictionary<int, string> dictionary = ne…

Java 垃圾收集机制

垃圾收集的基本概念 垃圾收集(Garbage Collection, GC) 是 JVM 自动管理内存的机制,负责回收不再使用的对象所占用的内存。 关键概念垃圾对象:不再被任何引用指向的对象GC Roots:始终可达的对象,作为引用链的起点…

Metasploit Framework 6.4.99 (macOS, Linux, Windows) - 开源渗透测试框架

Metasploit Framework 6.4.99 (macOS, Linux, Windows) - 开源渗透测试框架Metasploit Framework 6.4.99 (macOS, Linux, Windows) - 开源渗透测试框架 Rapid7 Penetration testing, updated November 15, 2025 请访问…

小程序获取OCR识别结果,示例代码

//获取OCR识别结果,示例代码--startwx.chooseMedia({count: 1,mediaType: [image],sourceType: [album, camera],maxDuration: 30,camera: back,success: (res) => {if(res.errMsg=="chooseMedia:ok"){l…

20232405 2024-2025-1 《网络与系统攻防技术》实验五实验报告

20232405 2024-2025-1 《网络与系统攻防技术》实验五实验报告1. 实验内容(1)对任意一个DNS域名进行查询并获取一些信息(2)查询任意社交媒体中好友的ip,并获取其所在地理位置(3)使用nmap对靶机环境进行扫描并获取…

Invicti v25.11 发布,新增功能简介

Invicti v25.11 发布,新增功能简介Invicti v25.11 发布,新增功能简介 Invicti v25.11.0 for Windows - Web 应用程序安全测试 Invicti (formerly Netsparker) | Web Application and API Security for Enterprise 请…

Acunetix v25.11 发布,新增功能简介

Acunetix v25.11 发布,新增功能简介Acunetix v25.11 发布,新增功能简介 Acunetix v25.11.0 (Linux, Windows) - Web 应用程序安全测试 Acunetix | Web Application Security Scanner 请访问原文链接:https://sysin.…

【运维自动化-标准运维】变量的高级用法

在全局变量使用篇里了解到了各类变量的基本用法,实际在很多场景下,需要对变量进行处理,这就是标准运维里变量的高级用法。只要处理变量符合python语法,在一行代码语句的长度内可以执行的代码,系统均是可以进行渲染…

MySQL数据过滤与计算字段实战技术指南

MySQL数据过滤与计算字段实战技术指南一、数据过滤进阶:多条件组合与高效筛选 在MySQL数据检索中,精准过滤数据是提升查询效率与结果有效性的核心环节。通过组合WHERE子句及专用操作符,可实现复杂业务场景下的数据筛…

2025-11-14 PQ v.Next日志记录

2025-11-14 PQ v.Next日志记录 在李剑老师的帮助下,PQ v1.1.9版本目前已上线,因此需要重新更新一下用户使用手册。 https://z.gitee.cn/zgca/projects/777586/repos/zgca/aipq/sources今日进度(4*4):基于最新版本…

详细介绍:K8s 安全机制全解析

详细介绍:K8s 安全机制全解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

详细介绍:MySQL索引指南

详细介绍:MySQL索引指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

实用指南:【第五章:计算机视觉-项目实战之推荐/广告系统】1.推荐系统基础与召回算法-(6)召回算法之u2i: FM、deepFM、召回双塔原理精讲与实战

实用指南:【第五章:计算机视觉-项目实战之推荐/广告系统】1.推荐系统基础与召回算法-(6)召回算法之u2i: FM、deepFM、召回双塔原理精讲与实战2025-11-16 16:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-sp…

微前端架构演进:决策、实践与协同

第一部分:引入微前端的决策过程 1. 业务与团队背景: OMNIEYE平台并非一开始就采用微前端。它最初是一个单体Vue 2应用。随着业务飞速发展,我们面临了典型的“前端巨石应用”问题:团队协作瓶颈:多个功能团队(数据…

OI 技术动作 注意事项集合

OI 技术动作 & 注意事项集合 底板:NOIP 注意事项梳理 by Cindy_Li 2024.11 参考:OI 赛制比赛 emergency kit by Qingyu 感谢 @R_shuffle @fnoihzhyan 提供大量建设性意见。 本文可能不够详细,但写的都是笔者认为…

Java 设计模式—— 责任链模式:从原理到 SpringBoot 最优搭建

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大模型基础补全计划(七)---Transformer(多头注意力、自注意力、位置编码)及实例与测试

大模型基础补全计划(七)---Transformer(多头注意力、自注意力、位置编码)及实例与测试PS:要转载请注明出处,本人版权所有。 PS: 这个只是基于《我自己》的理解, 如果和你的原则及想法相冲突,请谅解,勿喷。环境说明…