:Neden bazı insanlar yeni bir ArrayList oluşturmak için List temel sınıfını kullanıyor?
List<String> names = new ArrayList<String>();
Bu yaklaşımın arkasındaki mantık nedir? Bir arabirime
:Neden bazı insanlar yeni bir ArrayList oluşturmak için List temel sınıfını kullanıyor?
List<String> names = new ArrayList<String>();
Bu yaklaşımın arkasındaki mantık nedir? Bir arabirime
Programlama, değil bir uygulama
O Dörtlü Çete (GoF) bir design pattern bu. Neden?
Somut uygulama yerine soyut sözleşme ile yönlendirilirsiniz.
public class MyClass {
private List myList ;
public setMyList(List list){
myList=list;
}
}
ne LinkedList
uygulanmasını istediğiniz uygulama hakkında yerine ArrayList
? bu şekilde sadece bu özelliği ayarlayıcı ile enjekte etmeniz gerekir.
Soyutlama sadece şartname tarafından rehberlik uygulaması hakkında hiçbir şey bilmiyorum anahtarıdır.
bu What does it mean programming to an interface?arayüzün belirli uygulanmasından kodunuzu ayrıştırarak için okuyun.
Bu aynı zamanda ileride List
arabiriminin başka uygulamaya geçmek için yardımcı olur. Örneğin
-
Daha sonra size List
arabiriminin diğer bazı uygulanmasını kullanmış gerektiğine karar üzerine List<String> names = new ArrayList<String>();
var LinkedList
yüzden sadece List<String> names = new LinkedList<String>();
ve hiçbir şey sonları olarak değiştirin söylüyorlar. Bunun üzerine
Yani ArrayList Listesinin başka uygulamaya dökme olabilir? –
Listenin başka bir uygulamasıyla * değiştirilebilir *. – user2357112
'Vector' kimse artık kullanmamalısınız bir miras, eskimiş, çirkin, nefret dolu sınıftır. – Lion
List<String> names = new ArrayList<String>();
Eğer varsa kolayca gelecekte uygulanmasını geçiş yapar arayüzüne List
karşı kod yazmak.
ArrayList<String> names = new ArrayList<String>();
Sen uygulanması ArrayList
kendisi aleyhinde kodlayacak - şu yeterli olacaktır Bu durumda
List<String> names = new //some other implementation of List
Şimdi bir şey yaparsam. Ve kodunuz bu özel uygulamaya bağlı. Uygulamayı değiştirmeniz gerekiyorsa, çok fazla kod değişikliği gerektirecektir.
Kontrol docs o tip List
varlık olarak değişken bildirir, 6.
Böyle kodu değil kullanımınıList
sınıf yapar Java tarafından sağlanan standart implemenation bazılarını keşfetmek için.Bu abstraction
List
gerçek sınıf kullanılır belirtmeden yöntemler, gerçek sınıf sahip tanımlayan bir arayüzü olduğu adlandırılır.
burada değil büyük bir anlaşma, bu uygulama daha kompleksleri durumlarda bile gerekli, çok önemli olmasına rağmen
. Bu deseni daima takip etmek iyi bir uygulamadır.
böylece kodu yeniden yazmak zorunda kalmadan ArrayString' 'hakkında fikrinizi değiştirebilir. – akappa
Liste bir temel sınıf değil, bir arayüz. –
Sadece "* * Bazı insanlar" tarafından kullanılmaz. Bu bir zorunluluktur. – Lion