尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java 可变参数机制

Java 可变参数机制
📅 发布时间:2026/6/19 21:20:42

基本语法和使用

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);}
}

性能考虑

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

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

作者:YukiRinLL

出处:YukiRinLL的博客--https://www.cnblogs.com/SutsuharaYuki/

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但请保留该声明。

相关新闻

  • C# 高级类型 Dictionary(学习笔记4)
  • Metasploit Framework 6.4.99 (macOS, Linux, Windows) - 开源渗透测试框架
  • 小程序获取OCR识别结果,示例代码

最新新闻

  • 全国学历提升继续教育学习体验实录
  • 验证码绕过实战:从Pikachu靶场剖析客户端与服务端漏洞原理
  • Mission Planner终极指南:5步掌握开源无人机地面站专业飞行控制
  • Gemini大模型系列技术解析与真实能力边界
  • 修复kkFileView XSS漏洞与POI文件预览兼容性问题实战
  • 弱监督学习与概率提示技术在3D目标检测中的应用

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号