Table of Contents
ToggleJava Supplier Methods
功能接口,使用 Lambda 語法,可當作其他方法的傳入參數或是引用其他方法為實例,常用於初始化、預設值物件,無傳入參數,結果傳回 1 個泛型物件,提高了程式碼的可管理性,有助於分別進行單元測試,Supplier Java Methods 介紹常見的 get 等方法,了解 Supplier 的不同操作和方法,本篇增加了範例,並透過單元測試來驗證產出結果。
@FunctionalInterface
public interface Supplier<T> {
T get();
}
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- functional
| +- supplier
| +- SupplierMethodsTest.java
單元測試
Supplier Java Methods 提供 get 等操作 Supplier 。
get
建立 Supplier 物件,操作 get 方法,取得物件。
@Test
public void get() {
Supplier<String> supplier = () -> "Bacon";
String result = supplier.get();
System.out.println(result);
assertNotNull(result);
Supplier<Integer> intSupplier = () -> 5;
int intResult = intSupplier.get();
System.out.println(intResult);
assertTrue(intResult > 0);
Supplier<List<String>> listSupplier = ArrayList::new;
List<String> listResult = listSupplier.get();
System.out.println(listResult);
assertNotNull(listResult);
}
Bacon
5
[]
traditional
使用傳統方式,實作 Supplier 接口,取得物件。
public static class DefaultValue<E> implements Supplier<String> {
@Override
public String get() {
return "DEFAULT_VALUE";
}
}
@Test
public void traditional() {
DefaultValue<String> defaultValue = new DefaultValue<String>();
String result = defaultValue.get();
System.out.println(result);
assertNotNull(result);
}
DEFAULT_VALUE
SupplierMethodsTest.java
Supplier Methods in Java 新增單元測試,驗證 Supplier Functions in Java 是否符合預期。
package org.ruoxue.java_147.functional.supplier;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
import org.junit.Test;
public class SupplierMethodsTest {
@Test
public void get() {
Supplier<String> supplier = () -> "Bacon";
String result = supplier.get();
System.out.println(result);
assertNotNull(result);
Supplier<Integer> intSupplier = () -> 5;
int intResult = intSupplier.get();
System.out.println(intResult);
assertTrue(intResult > 0);
Supplier<List<String>> listSupplier = ArrayList::new;
List<String> listResult = listSupplier.get();
System.out.println(listResult);
assertNotNull(listResult);
}
public static class DefaultValue<E> implements Supplier<String> {
@Override
public String get() {
return "DEFAULT_VALUE";
}
}
@Test
public void traditional() {
DefaultValue<String> defaultValue = new DefaultValue<String>();
String result = defaultValue.get();
System.out.println(result);
assertNotNull(result);
}
}
心得分享
Supplier Functions in Java 屬於 java.util.function ,常用於建立預設值,例如:當物件為 Null 時,傳回預設值, 使用 Lambda 表達式能讓程式碼更加簡潔與直接,取代傳統實作接口的方法,減少了很多程式碼,大幅提高可讀性,提供了幾種 Supplier 常見範例。