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

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

不能引用在不同方法中定義的內(nèi)部類中的非final變量

不能引用在不同方法中定義的內(nèi)部類中的非final變量

不能引用在不同方法中定義的內(nèi)部類中的非final變量編輯:我需要更改幾個(gè)變量的值,因?yàn)樗鼈兺ㄟ^計(jì)時(shí)器運(yùn)行幾次。我需要通過計(jì)時(shí)器每次迭代不斷更新值。我無法將值設(shè)置為final,因?yàn)檫@會(huì)阻止我更新值,但是我收到了我在下面的初始問題中描述的錯(cuò)誤:我以前寫過以下內(nèi)容:我收到錯(cuò)誤“不能引用在不同方法中定義的內(nèi)部類中的非final變量”。這種情況發(fā)生在雙重調(diào)用價(jià)格和價(jià)格調(diào)用priceObject上。你知道我為什么會(huì)遇到這個(gè)問題。我不明白為什么我需要最后的聲明。此外,如果你能看到我想要做的是什么,我該怎么做才能解決這個(gè)問題。public static void main(String args[]) {     int period = 2000;     int delay = 2000;     double lastPrice = 0;     Price priceObject = new Price();     double price = 0;     Timer timer = new Timer();     timer.scheduleAtFixedRate(new TimerTask() {         public void run() {             price = priceObject.getNextPrice(lastPrice);             System.out.println();             lastPrice = price;         }     }, delay, period);}
查看完整描述

4 回答

?
侃侃爾雅

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

為避免奇怪的副作用,由匿名委托引用的java變量中的閉包必須標(biāo)記為final,因此要lastPrice在計(jì)時(shí)器任務(wù)中引用和定價(jià),需要將它們標(biāo)記為final。

這顯然不適合你,因?yàn)槟阆敫淖兯鼈?,在這種情況下你應(yīng)該考慮將它們封裝在一個(gè)類中。

public class Foo {
    private PriceObject priceObject;
    private double lastPrice;
    private double price;

    public Foo(PriceObject priceObject) {
        this.priceObject = priceObject;
    }

    public void tick() {
        price = priceObject.getNextPrice(lastPrice);
        lastPrice = price;
    }}

現(xiàn)在只需創(chuàng)建一個(gè)新的Foo作為final,并從計(jì)時(shí)器調(diào)用.tick。

public static void main(String args[]){
    int period = 2000;
    int delay = 2000;

    Price priceObject = new Price();
    final Foo foo = new Foo(priceObject);

    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            foo.tick();
        }
    }, delay, period);}


查看完整回答
反對(duì) 回復(fù) 2019-05-28
?
隔江千里

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

在使用匿名類時(shí),您只能從包含類訪問最終變量。因此,您需要聲明最終使用的變量(由于您要更改lastPriceprice,因此不適合您),或者不使用匿名類。

因此,您可以選擇創(chuàng)建一個(gè)實(shí)際的內(nèi)部類,您可以在其中傳遞變量并以正常方式使用它們

要么:

對(duì)你的lastPriceprice變量有一個(gè)快速(在我看來很丑陋)的黑客攻擊,這就是聲明它如此

final double lastPrice[1];final double price[1];

在您的匿名類中,您可以像這樣設(shè)置值

price[0] = priceObject.getNextPrice(lastPrice[0]);System.out.println();lastPrice[0] = price[0];


查看完整回答
反對(duì) 回復(fù) 2019-05-28
?
汪汪一只貓

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

很好的解釋為什么你不能做你想要做的事已經(jīng)提供。作為解決方案,可以考慮:

public class foo{
    static class priceInfo    {
        public double lastPrice = 0;
        public double price = 0;
        public Price priceObject = new Price ();
    }

    public static void main ( String args[] )
    {

        int period = 2000;
        int delay = 2000;

        final priceInfo pi = new priceInfo ();
        Timer timer = new Timer ();

        timer.scheduleAtFixedRate ( new TimerTask ()
        {
            public void run ()
            {
                pi.price = pi.priceObject.getNextPrice ( pi.lastPrice );
                System.out.println ();
                pi.lastPrice = pi.price;

            }
        }, delay, period );
    }}

似乎你可以做一個(gè)比這更好的設(shè)計(jì),但想法是你可以將更新的變量分組到一個(gè)不會(huì)改變的類引用中。


查看完整回答
反對(duì) 回復(fù) 2019-05-28
  • 4 回答
  • 0 關(guān)注
  • 927 瀏覽

添加回答

舉報(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)