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

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

Java 8 Lambda表達(dá)式-嵌套類中的多個(gè)方法呢?

Java 8 Lambda表達(dá)式-嵌套類中的多個(gè)方法呢?

桃花長相依 2019-12-13 11:10:57
我在以下位置閱讀有關(guān)新功能的信息:http : //www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html我看到了下面的示例:使用匿名類:button.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent ae) {        System.out.println("Action Detected");    }});使用Lambda:button.addActionListener(e -> {    System.out.println("Action Detected");});如果某人MouseListener想要在匿名類中實(shí)現(xiàn)多個(gè)方法,該怎么辦,例如:public void mousePressed(MouseEvent e) {    saySomething("Mouse pressed; # of clicks: "               + e.getClickCount(), e);}public void mouseReleased(MouseEvent e) {    saySomething("Mouse released; # of clicks: "               + e.getClickCount(), e);}... 等等?
查看完整描述

3 回答

?
滄海一幻覺

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

您可以通過使用輔助程序接口將多方法接口與lambda一起使用。這適用于這樣的偵聽器接口,在這些接口中,不需要的方法的實(shí)現(xiàn)是微不足道的(即,我們也可以做MouseAdapter提供的事情):


// note the absence of mouseClicked…

interface ClickedListener extends MouseListener

{

    @Override

    public default void mouseEntered(MouseEvent e) {}


    @Override

    public default void mouseExited(MouseEvent e) {}


    @Override

    public default void mousePressed(MouseEvent e) {}


    @Override

    public default void mouseReleased(MouseEvent e) {}

}

您只需要定義一次這樣的幫助程序接口。


現(xiàn)在,您可以Component c像這樣添加點(diǎn)擊事件的偵聽器:


c.addMouseListener((ClickedListener)(e)->System.out.println("Clicked !"));



查看完整回答
反對(duì) 回復(fù) 2019-12-14
?
達(dá)令說

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

Lambda EG確實(shí)考慮了這個(gè)問題。許多庫都使用功能接口,即使它們是在功能接口成為現(xiàn)實(shí)之前就設(shè)計(jì)的。但是有時(shí)候確實(shí)會(huì)發(fā)生一個(gè)類具有多個(gè)抽象方法的情況,而您只想使用lambda來定位其中的一個(gè)。


此處官方推薦的模式是定義工廠方法:


static MouseListener clickHandler(Consumer<MouseEvent> c) { return ... }

這些可以由API本身直接完成(這些可以是內(nèi)的靜態(tài)方法MouseListener),也可以是其他一些庫中的外部幫助器方法(如果維護(hù)者選擇不提供這種便利)。因?yàn)樾枰@種情況的情況很小,而且解決方法非常簡單,所以似乎并沒有要求進(jìn)一步擴(kuò)展語言以挽救這種極端情況。


采用了類似的技巧ThreadLocal; 請(qǐng)參閱新的靜態(tài)工廠方法withInitial(Supplier<S>)。


(順便說一句,當(dāng)出現(xiàn)此問題時(shí),示例幾乎總是MouseListener,這是令人鼓舞的,因?yàn)樗砻飨M麑?duì)lambda友好但對(duì)lambda友好的類的集合實(shí)際上很小。)



查看完整回答
反對(duì) 回復(fù) 2019-12-14
  • 3 回答
  • 0 關(guān)注
  • 260 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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