JAVA函数,形参默认值,可选形参实现
就结论来说不能实现以下这张默认参数设置的语法
(看到有帖子说能做,但我怀疑是胡编乱造的)
1 public void printMessage(String message = "Hello, World!") 2 { 3 4 }
下面来列举下几个实现方法
1.函数重载
1 public void printMessage(String message) 2 { 3 System.out.println(message); 4 } 5 6 public void printMessage() 7 { 8 System.out.println("Hello, World!"); 9 }
简单粗暴,但在参数多的时候会很烦,不方便维护
2.使用函数传值特性,在需要使用默认值的参数位置,传入null,而后在函数中做逻辑判断进而进行默认值赋予
public void printMessage(String message) { if(message==null) System.out.println("Hello, World!"); else System.out.println(message); }
3.使用Optional,实际上也是2方法的一个优化,官方给了颗语法糖
import java.util.Optional; public static void main(String[] args) { System.out.println(Add(1,2,Optional.empty())); System.out.println(Add(1,2,Optional.of(3))); } public static int Add(int n1,int n2,Optional n3) { if (!n3.isPresent()) { return n1+n2; }else{ return n1+n2+(int)n3.get(); } }
使用Optional对象对值进行了一次封装
传参时使用Optional.empty()来表示空值,Optional.of(Value)来表示传值,在函数中使用isPresent()来判断空值,get()来获取值(记得加强制转换
4.伸缩法,实际上也是属于1方法的优化的一种,本质是函数重载来使得函数进行叠加来实现伸缩
多参数的情况下可以预见维护性的下降
public static int Add(int n1,int n2,int n3,int n4) { return n1+n2+n3+n4; } public static int Add(int n1,int n2,int n3) { return Add(n1,n2,n3,4); } public static int Add(int n1,int n2) { return Add(n1,n2,3,4); }
5.。。。
其余就是使用一些OOP编程的设计模式来通过技巧的手段实现,JAVA本身是不支持 类似Python或者C#的 参数类型 参数名 = 默认值 的语法的。
综合上个人推荐使用Optional来实现
但具体场景具体讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人