Java Supplier Methods - Java 147

Java Supplier Methods – Java 147

Java 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 常見範例。

發佈留言