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

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

如何使用Lambda表達式計算按鈕點擊次數(shù)?

如何使用Lambda表達式計算按鈕點擊次數(shù)?

慕的地6264312 2021-05-06 14:15:50
在我的代碼的這一部分中,我想計算用戶按下按鈕的次數(shù)。問題是,如果我聲明該數(shù)字以計算該函數(shù)外部的點擊次數(shù),那么它根本不會執(zhí)行。這是我的意思:byte numButtonClicks = 0;    tellingIntroButton.addActionListener(e -> {        numButtonClicks ++;        System.out.println(numButtonClicks);    });在內(nèi)部聲明它也不是一個選擇,因為它將始終被重置。謝謝你的幫助!
查看完整描述

2 回答

?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

如果你有類似的東西


public class YourComponent extends JFrame { // or whatever it is you're extending


    // ....


    public void init() {

        // ...

        byte numButtonClicks = 0;


        tellingIntroButton.addActionListener(e -> {

            numButtonClicks ++;

            System.out.println(numButtonClicks);

        });

    }


    // ...

}

您會遇到一些問題。


匿名內(nèi)部類(例如您的動作偵聽器)中使用的變量必須隱式為final。您在對另一個答案的評論中提到的例外,


Exception in thread "main" java.lang.Error: Unresolved compilation problem: Local variable numButtonClicks defined in an enclosing scope must be final or effectively final

告訴您計數(shù)器變量不是最終變量


您正在使用一個byte字段作為計數(shù)器。為什么不選擇aint或a long?


您不能聲明finalint或long方法內(nèi)部并對其進行遞增。


您可以通過在班級中擁有一個成員來解決此問題,例如


public class YourComponent extends JFrame { // or whatever it is you're extending


    // ....


    private int numButtonClicks = 0;


    public void init() {

        // ...


        tellingIntroButton.addActionListener(e -> {

            YourComponent.this.numButtonClicks++;

            System.out.println(numButtonClicks);

        });

    }


    // ...

}

或者,就像其他答案所暗示的那樣,如果并發(fā)在這里對您來說是一個問題(如果可以通過不同的線程修改計數(shù)),則可以使用java8對象,例如LongAdder。如果您使用此路線(LongAdder),則在方法范圍內(nèi)聲明它時,必須將其聲明為final。


查看完整回答
反對 回復 2021-05-19
?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

您能讓我知道您得到的確切錯誤是什么。如果numButtonClicks是局部變量,則無法在lambda函數(shù)中對捕獲的局部變量進行突變。使它成為一個LongAdder類變量,該變量是原子的并為并發(fā)而設計。


  LongAdder numButtonClicks= new LongAdder();


              tellingIntroButton.addActionListener(e -> {

                    numButtonClicks.increment();

                    System.out.println(numButtonClicks);

                }); 


查看完整回答
反對 回復 2021-05-19
  • 2 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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