簡體   English   中英

方法中的java可選參數

[英]java optional parameter in methods

我想制作一個需要1個必需參數和1個可選參數的方法,但是我找到了如何通過在參數(int ... b)中創建一個可選數組,但這是一個數組,我想制作它只是這個值為null或用戶輸入它,我可以通過制作兩個相同名稱的方法,但一個具有單個參數和一個具有2個參數,但是它可以只使用一個方法嗎?

謝謝

不,Java不支持可選參數。 超載(這沒有多大意義的兩個參數,但一定道理的說明),另一種方法是使用代表所有參數的構建器類型-你可以提供包含必需的參數構建一個構造函數,然后每個可選項的setter,使setter返回構建器本身。 所以調用方法就像這樣:

foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10));

您正在尋找的是默認參數支持。 Java沒有這種能力,但它或多或少地模擬了這種能力。

一種簡單的方法是使用方法重載。

另一種方法是直接識別特殊情況,然后替換默認值。

以下是Ivo Limmen混合使用這兩種方法的示例:

public void test() {
   this.test(null, null);
}
public void test(String p1) {
   this.test(null, null);
}
public void test(String p1, String p2) {
   if(p1 == null) {
      ...
   } else {
      ...
   }
   if(p2 == null) {
      ...
   } else {
      ...
   }
}

我發現一個非常有趣的方法是使用Design Builder模式。 有一個例子在這里

還有一個有趣的討論, 在這里

不,這正是重載方法的用途

Java方法中的參數沒有“默認”值。 使用varargs或方法重載。

在java中,這是通過稱為方法重載的東西來完成的。 您可以使用相同的名稱創建多個方法,但不同的參數。

例如:

void method1(String arg1){ 
  // only one argument, here you can delegate the work of this method to the implementation that takes the most parameters and pass null for the optional parameters.
    method1(arg1, null);
}

void method1(String ar1, String arg2){
  // do work, handle the case where arg2 is null.
}

您的代碼的客戶端可以調用其中一個。 對他們而言,似乎第二個參數是可選的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM