• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

RX_3

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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来实现

但具体场景具体讨论

posted on 2023-11-20 00:38  RX_3  阅读(2677)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3