Java Koleksiyonlar Çerçevesi'ne baktığımda, arayüzlerin birkaçının yorum yaptığını fark ettim (optional operation)
. Bu yöntemler, UnsupportedOperationException
yalnızca bu yöntemi uygulamak istemiyorlarsa sınıfların uygulanmasına izin verir .
Bunun bir örneği, bir addAll
yöntem Set Interface
.
Şimdi, bu soru dizisinde belirtildiği gibi, arayüzler kullanımın ne bekleyebileceğine dair belirleyici bir sözleşmedir.
Arayüzler önemlidir, çünkü bir sınıfın yaptıklarını sınıfın yaptıklarından ayırırlar. Bir müşterinin ne bekleyebileceğini tanımlayan sözleşme, geliştiriciyi sözleşmeyi destekledikleri sürece uygulamayı istedikleri şekilde uygulamada serbest bırakır.
ve
Arayüz, bir nesnenin yapabileceği eylemlerin bir açıklamasıdır ... örneğin bir ışık anahtarını çevirdiğinizde, ışık yanar, nasıl olduğunu umursamazsınız, sadece yapar. Nesneye Yönelik Programlamada, Arayüz bir nesnenin "X" olması için sahip olması gereken tüm işlevlerin bir açıklamasıdır.
ve
Arayüz tabanlı yaklaşımın çok daha hoş olduğunu düşünüyorum. Daha sonra bağımlılıklarınızı güzel bir şekilde alay edebilirsiniz ve her şey temelde daha az sıkı bir şekilde birleştirilir.
Arayüz + Uzatma (mixin) ve Base Sınıf
Arayüzlerin amacının bir sözleşme tanımlamak ve bağımlılıklarınızı gevşek bir şekilde birleştirmek olduğu göz önüne alındığında, bazı yöntemlere sahip olmak bir UnsupportedOperationException
tür yenilgiyi atmaz mı? Bu artık geçirilemediğim Set
ve sadece kullanamayacağım anlamına geliyor addAll
. Bunun yerine, hangi uygulamanın uygulandığımı bilmek zorundayım Set
, böylece kullanıp kullanamayacağımı öğrenebilirim addAll
. Bu benim için oldukça değersiz görünüyor.
Peki anlamı UnsupportedOperationException
nedir? Sadece eski kodları telafi ediyor mu ve arayüzlerini temizlemeleri mi gerekiyor? Yoksa özlediğim daha duygusal bir amacı var mı?
src.zip
sürece harika çalışıyor. JRE'nin bazen hangi kodu çalıştırdığını tam olarak bilmeye yardımcı olur ve biraz ayrıntılı olabilen JavaDoc'a ertelemeyin.
addAll
içindeHashSet
. Bu varsayılan uygulanmasına defersAbstractCollection
kesinlikle gelmez ki değil atmakUnsupportedOperationException
.