SORU
11 Mart 2010, PERŞEMBE


Java bir yöntem içinde sınıf tanımları

public class TestClass
{
    public static void main(String[] args) 
    {
        TestClass t = new TestClass();
    }

    private static void testMethod(){
        abstract class TestMethod{
            int a;
            int b;
            int c;

            abstract void implementMe();
        }

        class DummyClass extends TestMethod{
            void implementMe(){

            }
        }

        DummyClass dummy = new DummyClass();
    }
}

Yukarıdaki kod parçası Java tamamen yasal olduğunu öğrendim. Şu soru var.

  1. Hiç bir yöntem içinde bir sınıf tanımı sahip olmanın ne yararı var?
  2. Sınıf dosyası DummyClass için oluşturulur
  3. Bana bir Nesne bu kavramı anlamanın zor Odaklı anlayışı. Bir davranış, bir sınıf tanımının bulunması. Muhtemelen birisi eşdeğer gerçek dünya örnekleri ile söyler.
  4. Bir yöntem içinde soyut sınıflar bana biraz çılgınca geliyor. Ama hayır arabirimleri izin verdi. Bunun arkasında bir neden var mı?

Teşekkürler

Düzenleme:İlave bir soru daha Soyut yöntem sınıfları ile ilgili.

CEVAP
11 Mart 2010, PERŞEMBE


Bu yerel bir sınıf olarak adlandırılır.

2 kolay: evet, bir sınıf dosyası oluşturulur.

1 ve 3 aynı soru. Hiç bir örneğini ya da uygulama ayrıntıları hakkında bilmeniz gereken yerde yerel bir sınıf her yerde ama bir yöntemi kullanabilirsiniz.

Tipik bir kullan-çöpe at bazı arayüz uygulaması oluşturmak olacaktır. Örneğin genellikle bu gibi bir şey göreceksiniz:

  //within some method
  taskExecutor.execute( new Runnable() {
       public void run() {
            classWithMethodToFire.doSomething( parameter );
       }
  }); 

Eğer bu bir grup oluşturun ve onlarla bir şeyler yapmak gerekirse, bu değişebilir

  //within some method
  class myFirstRunnableClass implements Runnable() {
       public void run() {
            classWithMethodToFire.doSomething( parameter );
       }
  }
  class mySecondRunnableClass implements Runnable() {
       public void run() {
            classWithMethodToFire.doSomethingElse( parameter );
       }
  }
  taskExecutor.execute(new myFirstRunnableClass());
  taskExecutor.execute(new mySecondRunnableClass());

Eğer derleyici için yerel olarak tanımlanmış arayüzler bir sorun kılan teknik bir sorun varsa emin değilim, ama eğer değil ise bile, herhangi bir değer eklemek vermediler. arayüzleri hakkında: Eğer yerel bir arabirimi uygulayan yerel bir sınıf yöntemi dışında kullanılan, arayüzü anlamsız olurdu. Ve eğer yerel bir sınıf tek yöntem içinde kullanılacak olsaydı, arayüz ve sınıf hem arayüz tanımı yedek olur bu yöntem içinde uygulanması.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • Sorikan

    Sorikan

    3 ŞUBAT 2008
  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009