Java Koleksiyonlar Çerçevesi'ne baktığımda, arayüzlerin birkaçının yorum yaptığını fark ettim (optional operation). Bu yöntemler, UnsupportedOperationExceptionyalnızca bu yöntemi uygulamak istemiyorlarsa sınıfların uygulanmasına izin verir .
Bunun bir örneği, bir addAllyö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 UnsupportedOperationExceptiontür yenilgiyi atmaz mı? Bu artık geçirilemediğim Setve 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ı UnsupportedOperationExceptionnedir? Sadece eski kodları telafi ediyor mu ve arayüzlerini temizlemeleri mi gerekiyor? Yoksa özlediğim daha duygusal bir amacı var mı?
src.zipsü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.
addAlliçindeHashSet. Bu varsayılan uygulanmasına defersAbstractCollectionkesinlikle gelmez ki değil atmakUnsupportedOperationException.