SORU
19 AĞUSTOS 2009, ÇARŞAMBA


Olamaz bir iç sınıf içinde nihai olmayan bir değişken farklı bir yöntem tanımlanmış bakın

Düzenlenmiştir: Birkaç kez bilgilendirici bir zamanlayıcı çalışan birçok değişken değerlerini değiştirmek istiyorum. Timer ile her yineleme ile değerleri güncelleyerek tutmak lazım. Bana bunu ilk soru olarak aşağıda tarif hatayı alıyorum ancak değerleri güncelleme alıkoyamaz olarak son değerleri ayarlayın:

Aşağıda daha önce ne yazmıştım:

Hatayı alıyorum "cannot bir iç sınıf içinde nihai olmayan bir değişken farklı bir yöntem olarak tanımlanan" bakın.

Bu çift denilen fiyat ve Fiyat priceObject diye oluyor. Bu sorun neden biliyor musun. Sonuç Bildirgesi ihtiyacım var neden anlamıyorum. Ayrıca eğer yapmaya çalışıyorum ne olduğunu görebilirsiniz, ben bu sorunu geçici olarak almak için ne yapmalıyım.

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);
}

CEVAP
19 AĞUSTOS 2009, ÇARŞAMBA


Java desteği yok senin gibi isimsiz bir sınıf kullanarak burada kullandığınız halde 5**, (() new TimerTask { ... }) kapatılması doğru bir tür gibi görünüyor.

edit-Aşağıdaki yorum - aşağıdaki KeeperOfTheSoul belirttiği gibi doğru bir açıklama değil.

Bu neden çalışmıyor

Değişkenler lastPrice ve fiyatı ana yerel değişkenler() yöntemi. Anonim sınıfı ile oluşturduğunuz nesne ana kadar dayanabilir() yöntemi döndürür.

Ana Zaman() yöntemi döndürür, yerel değişkenler (lastPrice ve fiyat gibi) artık ana sonra mevcut olmayacak şekilde yığından temizlemiş olacak() döndürür.

İsimsiz sınıf başvuruları bu değişkenler nesne. İşleri anonim sınıf nesnesi temizlendikten sonra değişkenleri erişmeye çalışırsa çok kötü olur.

LastPrice ve fiyat final, yaparak gerçekten artık değişkenler, sabitler. Derleyici o zaman sadece yerine kullanımı lastPrice ve fiyat anonim sınıfı ile değerler sabitler (derleme zamanında, elbette), ve bu olmayacak sorun ile erişim olmayan değişkenler artık.

Destek kilitler, diğer programlama dilleri, özellikle bu değişkenler kapanması değişkenler erişebilmesi yöntemi sona erdiğinde yok, anlamıyorlar sağlayarak davranarak yap.

Bunu yapabilirsiniz: . @Ankur:

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

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {
        // Variables as member variables instead of local variables in main()
        private double lastPrice = 0;
        private Price priceObject = new Price();
        private double price = 0;

        public void run() {
            price = priceObject.getNextPrice(lastPrice);
            System.out.println();
            lastPrice = price;
        }
    }, delay, period);      
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • jbignacio

    jbignacio

    13 Mart 2006
  • Sergio Fernandez

    Sergio Ferna

    1 EKİM 2009