Özellik olarak 8 varsayılan yöntemleri Java : güvenli mi? | Netgez.com
SORU
23 ŞUBAT 2015, PAZARTESİ


Özellik olarak 8 varsayılan yöntemleri Java : güvenli mi?

Güvenli bir uygulama kullanmaktırözelliklerin zavallı adamı bir versiyonu olarak varsayılan yöntemleriJava 8?

Eğer sorun yok, ama amacım bu değil çünkü sadece onun iyiliği için kullanıyorsanız, Some claim it may make pandas sad. Ayrıca genellikle varsayılan yöntemleri gerçek olan evrim API desteği ve geriye dönük uyumluluk için sunulan hatırlattı, ama bu yanlış ya da çarpık başlı başına özellikleri olarak kullanmak için yapmaz.

the following practical use case aklımda:

public interface Loggable {
    default Logger logger() {
        return LoggerFactory.getLogger(this.getClass());
    }
}

Ya da belki de, belirli bir PeriodTrait:

public interface PeriodeTrait {
    Date getStartDate();
    Date getEndDate();
    default isValid(Date atDate) {
        ...
    }
}

Admitedly, kompozisyon kullanılabilir (hatta yardımcı sınıflar) ama daha ayrıntılı ve karmaşık görünüyor ve polimorfizmi faydalanmak için izin vermez.

YaniTamam/güvenli temel özellikleri olarak varsayılan yöntemleri kullanmaktırya da beklenmedik yan etkileri hakkında endişelenmeli miyim?

BÖYLECE Several questions Java vs Scala özellikleri ile ilgili konu burada değil. Görüş ya da sadece istemiyorum. Bunun yerine, yetkili bir yanıt ya da en azından alan fikir arıyorum: eğer şirketinizin proje özellikleri olarak varsayılan yöntemleri kullandıysanız, timebomb oldu?

CEVAP
23 ŞUBAT 2015, PAZARTESİ


Kısa cevap: Eğer onları güvenli bir şekilde kullanırsanız güvenli :)

Alaycı cevap: bana ne olduğunu söylesanaözellikleri demek, belki daha iyi bir cevap ver:) ederim

Tüm ciddiyetimle, terim "sürekli" olarak belli değildir. Birçok Java geliştiricileri Scala ifade gibi özellikleri ile en tanıdık, ama Scala ilk dilden uzak özelliklere sahip, ya da etkisi adı verilir.

Scala örneğin, özellikleri açıklamalı (var değişken olabilir); Kale içinde saf bir davranış. Yöntemleri vatansız varsayılan Java arayüzleri; bu özellikleri olmadıkları anlamına mı geliyor? (İpucu: bu hileli bir soru oldu.)

Yine, Scala, özellikler yoluyla oluşan, market, süper; eğer sınıf A uzanır özellikleri X Y, sonra sırada hangi X Y karışık nasıl belirler çatışmalar arasında X Y çözülmüş. Java, bu market, süper mekanizma mevcut değildir (çok oldu çünkü, kısmen reddedilmiş, "BM-Java-gibi".)

Arabirimleri için varsayılan yöntem eklemek için yakın neden destek olduarayüz evrimibunun çok ötesine gittiğini biliyoruz ama. Bu arayüzü "evrim" veya "özellikleri--" kişisel yorum meselesi. siz düşünün ister Güvenlik hakkında soru ... mekanizması aslında destekler ne sopa sürece, etmeye çalışmak yerine cevabı ... wishfully zor bir şey desteklemiyor, sorun yok.

Temel tasarım hedefi, bakış açısındanistemcibir arabirim, varsayılan yöntemleri "" arabirim yöntemleri. düzenli farksız olmalı Bir yöntem varsayılan-ness, bu nedenle, sadece ilginçtasarımcıveuygulayıcıarabirimi.

Burada iyi tasarım hedefleri içinde bazı kullanım durumları:

  • Arayüz evrimi. Burada, bu arayüzü mevcut yöntemler açısından mantıklı varsayılan bir uygulama olan mevcut bir arayüz, yeni bir yöntem ekleniyor. Bir örnek varsayılan uygulama iterator() yöntem açısından yazılır Collection forEach yöntemi ekleme olurdu.

  • "İsteÄŸe baÄŸlı" yöntemleri. Burada, arayüz tasarımcısı söyleyerek "Uygulayıcıları eÄŸer gerektirdiÄŸi iÅŸlevsellik sınırlamalar ile yaÅŸamak istediklerini, bu yöntemi uygulamak zorunda deÄŸildir". ÖrneÄŸin, Iterator.remove her neyse, bu davranış var olan bir varsayılan verildi, varsayılan bu yöntem aslında isteÄŸe baÄŸlı hale getirir. EÄŸer AbstractCollection davranış varsayılan olarak ifade edildi (Collection, mutative yöntemleri için aynısını yapabiliriz.)

  • Uygun yöntem. Bu kesinlikle kolaylık saÄŸlamak için, daha genel olarak sınıf varsayılan olmayan yöntemlerle uygulanan yöntemlerdir. İlk örnekte logger() yöntem, bu makul bir örneÄŸidir.

  • Combinators. Bu arayüzü mevcut örneÄŸine göre yeni örneklerini oluÅŸturmak bu kompozisyon yöntemleri vardır. ÖrneÄŸin, yöntemleri Predicate.and() Comparator.thenComparing() combinators örnektir.

Eğer verdiğiniz bir varsayılan uygulaması gerektiğini de bulunur bazı özellikler için varsayılan (GÖRDÜM, kullandığımız @implSpec javadoc etiketi için) yardım uygulayıcıları anlayış olsun istedikleri için geçersiz kılma yöntemi ya da değil. Bazı varsayılan, uygun yöntem ve combinators gibi, neredeyse hiç geçersiz kılınır; Diğerleri, isteğe bağlı yöntemleri gibi, sık sık geçersiz kılınır. Yeterince belirtimi (belgeler) varsayılan yapmak için söz ne olacak vermeniz gerekir, uygulayıcı, geçersiz kılmak için gerekli olup olmadığı hakkında mantıklı bir karar verebilirsin.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Keith Anthe

    Keith Anthe

    26 NİSAN 2011
  • Learn word 2013 tutorials

    Learn word 2

    5 AÄžUSTOS 2014