SORU
9 EYLÜL 2015, ÇARŞAMBA


Java'da üçlü operatör vs if/else&; lt JDK8 içinde uyumluluk

Son Bahar Çerçeve kaynak kodunu okuyorum. Burada bir şeyler gidiyor anlayamıyorum:

public Member getMember() {
    // NOTE: no ternary expression to retain JDK <8 compatibility even when using
    // the JDK 8 compiler (potentially selecting java.lang.reflect.Executable
    // as common type, with that new base class not available on older JDKs)
    if (this.method != null) {
        return this.method;
    }
    else {
        return this.constructor;
    }
}

Bu yöntem Sınıf org.springframework.core.MethodParameter üyesidir. Kodu kolay yorum zor olsa anlamaktır.

NOT: üçlü ifade için korumak olduğunu GÖRDÜM <8 uyumluluğu bile kullanırken GÖRDÜM 8 derleyici (potansiyel olarak seçilmesi java.lang.reflect.Executable gibi ortak tür, bu yeni temel sınıf kullanılamaz eski JDKs)

Üçlü ifade kullanarak ve kullanmak arasındaki fark if...else... Bu bağlamda yapı nedir?

CEVAP
9 EYLÜL 2015, ÇARŞAMBA


İşlenen türü hakkında düşündüğümüz zaman, bu sorun daha belirgin hale gelir:

this.method != null ? this.method : this.constructor

tip olarak hem işlenen en özel yaygın türü, yani en özel türü this.method this.constructor Her iki ortak.

Bu 18 ** ancak Java 7 Java 8 sınıf kitaplığı Member genel daha özel olan 19* *yeni bir türü tanıttı. Dolayısıyla Java 8 sınıf kitaplığı ile sonucu üçlü ifadenin türü Executable Member yerine.

Java 8 derleyici (ön sürüm) sürümleri üçlü operatör derleme oluşturulan kod içinde Executable açık bir başvuru üretilmiş gibi görünüyor. Bu sınıf, bir yük yaratacağı ve bir sınıf kitaplığı < Executable 8, komple cam ile çalışan varsa çalışma zamanında ClassNotFoundException ≥ 8 olduğunu GÖRDÜM böylece.

Belirtildiği gibi tarafından Tagir Valeev this answer, Bu aslında bir hata yayım öncesi sürümleri ile İLGİLENİYORUZ 8 ve beri sabit, yani ikisi de if-else çözüm ve açıklayıcı yorum artık demode.

Ek not:Bu derleyici hata Java 8 önce var olduğu sonucuna gelebilir. Ancak, byte kod OpenJDK 7 ile üçlü için oluşturulan byte kodun OpenJDK 8 tarafından üretilen aynıdır. Aslında, ifadenin türü tamamen herhangi bir ek kontrolleri olmadan çalışma zamanı; kod sadece test, şube, yük, dönüş de atıfta gider. Gerisi bu bir sorun (artık) değildir emin ve gerçekten Java 8 gelişimi sırasında geçici bir sorun gibi görünüyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • Tube Time

    Tube Time

    14 Mayıs 2013

İLGİLİ SORU / CEVAPLAR