SORU
19 Mayıs 2010, ÇARŞAMBA


Nasıl "nesne yapar.yeni" iş? (Yok Java var .yeni operatör?)

Bu kod üzerinde iken bugün Accelerated GWT (Gupta) - page 151 okumaya geldim.

public static void getListOfBooks(String category, BookStore bookStore) {
    serviceInstance.getBooks(category, bookStore.new BookListUpdaterCallback());
}
public static void storeOrder(List books, String userName, BookStore bookStore) {
    serviceInstance.storeOrder(books, userName,    bookStore.new StoreOrderCallback());
}

Bu yeni operatörler orada ne yapıyorsun? Hiç böyle bir sözdizimi gördüm, birisi açıklayabilir mi?

Herkes java spec bu nereden biliyor?

CEVAP
19 Mayıs 2010, ÇARŞAMBA


Onlar(statik olmayan iç içe geçmiş) sınıflar:

public class Outer {
  public class Inner { public void foo() { ... } }
}

Yapabilirsiniz:

Outer outer = new Outer();
outer.new Inner().foo();

ya da sadece:

new Outer().new Inner().foo();

Bunun nedeni Inner dış sınıfın belirli bir örneği için bir başvuru var. Bana bunu daha ayrıntılı bir örnek vereyim:

public class Outer {
  private final String message;

  Outer(String message) {
    this.message = message;
  }

  public class Inner {
    private final String message;

    public Inner(String message) {
       this.message = message;
    }

    public void foo() {
      System.out.printf("%s %s%n", Outer.this.message, message);
    }
  }
}

ve çalıştırın:

new Outer("Hello").new Inner("World").foo();

Çıkışlar:

Hello World

Not:yuvalanmış sınıfları static da olabilir. Eğer öyleyse, dış sınıfına this örtülü referans var:

public class Outer {
  public static class Nested {
    public void foo() { System.out.println("Foo"); }
  }
}

new Outer.Nested.foo();

Daha sık değil, statik, iç içe geçmiş sınıflar uygulama ayrıntıları ve kamu ad kirletmeden bir sorunun parçası sarmalayan düzgün bir yol olma eğilimindedir private.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • tinycammonitor

    tinycammonit

    14 Aralık 2010
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011
  • Tylerron

    Tylerron

    6 AĞUSTOS 2006