HOWTO · Java
在 Java 函式中返回兩個值
本文介紹如何在 Java 中返回兩個值。
本頁內容
在 Java 中,沒有將兩個值返回給函式的特權。解決多值返回帶來的問題,可以通過建立一個使用者定義的類來儲存輸出,或者使用內建的資料型別如 Array,Pair(如果只有兩個值需要返回),HashMap 和 String Array。
在 Java 中使用 ArrayList 類返回多個值
下面是演示返回兩個以上值的 Java 函式的小程式碼塊。
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = callFunction();
list.forEach(System.out::println);
}
private static ArrayList<String> callFunction() {
return new ArrayList<>(Arrays.asList("Hi", "Hello"));
}
}
在上面的程式碼中,定義了一個方法來理解 Java 中的返回功能。callFunction 方法是從 main 函式或驅動程式類呼叫的;它是 JavaReturnTwoValues 類私有的。
在函式定義中,一個 ArrayList 物件最初使用兩個值進行例項化。公共類建構函式中允許使用這些值。使用 Arrays.asList() 函式允許內聯例項化,因此,在宣告時定義值。
靜態 asList 方法返回指定為引數的已定義列表。return 關鍵字後面總是接受一個引數。如果指定了多個引數,則會引發編譯時錯誤問題。
函式的值儲存在 list 區域性變數中。在區域性變數上,呼叫 forEach() 方法。這個指定的方法採用一個 Consumer 例項,一個具有單個 accept 程序的功能介面。這意味著它只消耗值或類,不返回任何東西。
因此,該語句從列表例項中按順序發出元素,而 forEach 方法使用這些元素在控制檯上列印值。:: 是一個方法引用運算子,類似於 lambda 表示式,a-> System.out.println(a)。
上面程式碼塊的輸出如下所示。
Hi Hello World
在 Java 中使用 Pair 類返回兩個值
下面是使用使用者定義的 Pair 類來理解其功能的程式碼塊。
public class Main {
public static void main(String[] args) {
Pair<String, String> pair = callPairFunction();
System.out.println(pair.getKey() + " " + pair.getValue());
}
private static Pair<String, String> callPairFunction() {
return new Pair<String, String>("Key", "I am value");
}
}
class Pair<T1, T2> {
private final T1 key;
private final T2 value;
public Pair(T1 first, T2 second) {
this.key = first;
this.value = second;
}
public T1 getKey() {
return key;
}
public T2 getValue() {
return value;
}
}
在上面的程式中,定義了兩個類:一個是儲存 main 或驅動程式函式的公共類,另一個是使用者定義的 Pair 類,用於在內部說明 pair 的功能。
驅動程式類具有呼叫函式和值操作過程的程式碼。callPairFunction 是一個私有方法,它返回一個 Pair 使用者定義的資料型別。該類被宣告為儲存一對值,即鍵及其值。
在主類下面是一個使用者定義的類,Pair<T1, T2>。它通常被定義為 Java 中 Generics 的概念並在其上工作。引數 T1 和 T2 是通用資料型別,這意味著它們可以採用傳遞的資料型別的形式。在我們的例子中,字串被傳遞,所以 T1 和 T2 變成了 String 型別。
該類有一個公共建構函式,它使用傳遞的值例項化區域性變數。使用公共 getKey 和 getValue 方法,在建構函式中例項化後返回鍵和值。
在 callPairFunction 方法中,使用 new 關鍵字返回 Pair 類的一個例項。該語句呼叫類的公共建構函式並設定鍵和值變數。返回的例項用於檢索 Pair 類左側和右側的值。
下面是上面程式碼中定義的輸出。
Key I am value
值得注意的是,org.apache.commons.lang3.tuple 包也提供了一個類似的內建類供使用。Pair 是包中存在的一個類,用於儲存現有的函式和操作以處理值。
通常可以使用預定義的類來避免編寫繁瑣的程式碼和建立新的 Pair 類的開銷。此處顯示了要注入專案的依賴關係。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.7</version>
</dependency>