第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Headfirst 設(shè)計(jì)模式里面的 命令模式 中的有關(guān)數(shù)組賦值代碼

Headfirst 設(shè)計(jì)模式里面的 命令模式 中的有關(guān)數(shù)組賦值代碼

胡子哥哥 2019-05-23 11:58:54
看不懂這段數(shù)組的賦值代碼。publicRemoteControl(){onCommands=newCommand[7];offCommands=newCommand[7];for(inti=0;i{};offCommands[i]=()->{};}}這是啥意思???onCommands[i]=()->{};offCommands[i]=()->{};按這樣子運(yùn)行,結(jié)果是對的;但如果改成等于null,就會報(bào)錯(cuò),顯然“()->{}”并不代表賦空值。
查看完整描述

2 回答

?
開滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

()->{}是一個(gè)Java8的新特性:lambda表達(dá)式。
命令模式在Java8以前的實(shí)現(xiàn)是類似這樣的:
pulicinterfaceCommand{
voiddoCommand();
}
這種單方法的接口,在Java8里允許使用簡潔的lambda表達(dá)式來描述,如果這個(gè)方法有參數(shù),比如:
publicinterfaceCommand{
voiddoCommand(intarg1,intarg2);
}
那么,就可以用(arg1,arg2)->{System.out.println(arg1+arg2);}來描述一個(gè)接口的實(shí)現(xiàn)。
這是函數(shù)式編程的一種體現(xiàn),你可以多了解一下Java8這方面的新特性。
所以回過頭來說,()->{}表示的是,實(shí)現(xiàn)了某個(gè)接口的空參、啥都不干的接口實(shí)例。具體實(shí)現(xiàn)的是哪個(gè)接口取決于onCommands的類型聲明。
so,你這個(gè)例子里意思就是:創(chuàng)建兩個(gè)數(shù)組,分別是開啟時(shí)要執(zhí)行的命令、關(guān)閉時(shí)要執(zhí)行的命令,數(shù)組長度為7;為了初始化,避免空指針,為這兩個(gè)數(shù)組賦值啥都不干的接口實(shí)例是最合適的。
                            
查看完整回答
反對 回復(fù) 2019-05-23
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

這里涉及到lambda表達(dá)式的問題。先參考一下這篇文章和這篇文章,了解一下什么是lambda表達(dá)式。
在JAVA8以后推出了函數(shù)式編程,JAVA開始支持函數(shù)式參數(shù)傳遞。什么意思呢?就是函數(shù)也可以作為一個(gè)參數(shù)變量進(jìn)行傳遞。下面舉一個(gè)真實(shí)的用例來解釋一下:
假設(shè)現(xiàn)在有一個(gè)String數(shù)組,我想找到里面名字叫做rale的童鞋:
intfindRale(Listnames){
for(inti=0;iif(names.get(i).equals("rale")returni;
}
return-1;
}
也許我還想要找到里面所有首字母為R的同學(xué),總之,很多類似的操作。
這時(shí)候有人想了,既然我需要對數(shù)組進(jìn)行那么多類似的篩選操作,那么為什么我不寫一個(gè)通用的filter方法,然后傳入我想執(zhí)行的操縱呢?JAVA8表示,完全沒有問題。
//這里使用了JAVA8提供的Predicate接口,實(shí)現(xiàn)了函數(shù)式編程,也可以自定義函數(shù)式接口
//這一段代碼相當(dāng)于將(n)->n.equalsTo("Rale")方法賦值給sum
Predicatesum=(n)->n.equalsTo("Rale");
filter(names,sum);
//將數(shù)組以及想要傳遞給數(shù)組的操作作為參數(shù)丟入filter方法中
publicstaticvoidfilter(Listnames,Predicatecondition){
for(Stringname:names){
if(condition.test(name)){
System.out.println(name+"");
}
}
}
當(dāng)然了,在函數(shù)式編程推出后,JAVA也提出了更多更加精煉的寫法,這里就不一一贅述。
現(xiàn)在我們回到你題目中的這段代碼。Command就是一個(gè)函數(shù)式的接口,它可以被方法賦值。在這里onCommands和offCommands都被初始化空函數(shù)()->{}。如果后序有一個(gè)operate(Objecto,Commandc)方法,就可以直接傳入Command對象,從而直接在o上執(zhí)行相應(yīng)的操作。
其實(shí)函數(shù)式編程和面向?qū)ο蟮木幊趟枷胧怯袥_突的。理解起來還要稍微轉(zhuǎn)變一下思路。
                            
查看完整回答
反對 回復(fù) 2019-05-23
  • 2 回答
  • 0 關(guān)注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號