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

  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Subscribe!!

    Subscribe!!

    3 EKİM 2009