Java中方法作為參數(shù)傳遞的方式
java中將方法當(dāng)作參數(shù)傳遞的方式
1. 使用consumer接口
在Java8
中引入了一個函數(shù)式接口Consumer
的對象,該對象可以把方法作為參數(shù)進(jìn)行傳遞。
接口定義:
@FunctionalInterface public interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } }
該接口接收一個泛型參數(shù)T
,然后可以自定義實(shí)現(xiàn)Consumer
接口中的accept
方法來對T
進(jìn)行一系列的操作,該方法沒有返回值。
示例:
void testConsumer(Integer id, Consumer consumer, String msg){ consumer.accept(msg); } public static void main(String[] args){ testConsumer(System.out::println, "consumer接口測試..."); testConsumer(x -> { x = StringUtils.join(x,String.valueof(x).length()); System.out.println(x); }, "consumer接口測試...") } # 輸出結(jié)果 接口測試... 接口測試...15
其實(shí),主要是理解Consumer
消費(fèi)者,就可以了~主要是對入?yún)⒆鲆恍┝械牟僮?,?code>stream里,主要是用于forEach
;內(nèi)部迭代的時候,對傳入的參數(shù),做一系列的業(yè)務(wù)操作,沒有返回值;
這個接口,只有一個默認(rèn)方法,看下注釋內(nèi)容,就清楚用法了,就不在寫案例解釋了
/**傳入一個Consumer類型的參數(shù), *他的泛型類型, *跟本接口是一致的T,先做本接口的accept操作, *然后在做傳入的Consumer類型的參數(shù)的accept操作 */ default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; }
2. 基于lambda表達(dá)式
示例:
public class TestClass { interface TestFunction<T>{ boolean getBooleanValue(T t); } static class Student{ String name; Double score; Student(String name, Double score) { this.name = name; this.score = score; } Double getScore() { return score; } } static <T> void printMsg(T obj, TestFunction<T> function){ if(function.getBooleanValue(obj)){ System.out.println("result is true"); }else{ System.out.println("result is false"); } } public static void main(String[] args) { printMsg(new Student("張三",92.5),x->{ return x.getScore().compareTo(90d) > 0; }); printMsg(new Student("張三",80.5),x->{ return x.getScore().compareTo(90d) > 0; }); } } # 輸出結(jié)果 result is true result is false
3. 參考資料
https://blog.csdn.net/qq_28410283/article/details/80618456
https://blog.csdn.net/qq_44964202/article/details/114992507
Java如何讓方法作為參數(shù)傳遞
代碼如下所示:
/** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:21:06 */ @FunctionalInterface public interface Functional { void run(); } /** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:21:22 */ public class Work { public static void doSome(Functional functional) { System.out.println("我要開始干活了"); System.out.println("我板了一塊磚"); System.out.println("接下來是老板安排的任務(wù)..."); functional.run(); System.out.println("活干完了"); } } /** * @Author HE LONG CAN * @Description TODO * @Date 2022-06-26 12:22:28 */ public class Main { public static void main(String[] args) { Work.doSome(() -> { System.out.println("老板讓我寫報(bào)告"); System.out.println("寫報(bào)告中...."); }); } }
到此這篇關(guān)于Java中方法作為參數(shù)傳遞的方式的文章就介紹到這了,更多相關(guān)java方法作為參數(shù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06微服務(wù)之間如何通過feign調(diào)用接口上傳文件
這篇文章主要介紹了微服務(wù)之間如何通過feign調(diào)用接口上傳文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06基于XML的MyBatis的環(huán)境搭建過程詳解(IDEA)
這篇文章主要介紹了基于XML的MyBatis的環(huán)境搭建過程詳解(IDEA),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Java中Spring技巧之?dāng)U展點(diǎn)的應(yīng)用
這篇文章主要介紹了Java中Spring技巧之?dāng)U展點(diǎn)的應(yīng)用,下文Spring容器的啟動流程圖展開其內(nèi)容的相關(guān)資料,具有一定的參考價值,需要的小伙伴可以參考一下2022-04-04SpringBoot2 整合Ehcache組件,輕量級緩存管理的原理解析
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級緩存管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08java字節(jié)碼框架ASM的深入學(xué)習(xí)
這篇文章主要給大家介紹了java中字節(jié)碼框架ASM的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01