2013-07-03 15 views
7
İnsanların yeni ArrayList örneğini ve Listesi arayüzüne atamak yerde de böyle kod genelinde gelmesini sağlayacak

: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

+3

böylece kodu yeniden yazmak zorunda kalmadan ArrayString' 'hakkında fikrinizi değiştirebilir. – akappa

+2

Liste bir temel sınıf değil, bir arayüz. –

+3

Sadece "* * Bazı insanlar" tarafından kullanılmaz. Bu bir zorunluluktur. – Lion

cevap

3

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?

16

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

+0

Yani ArrayList Listesinin başka uygulamaya dökme olabilir? –

+1

Listenin başka bir uygulamasıyla * değiştirilebilir *. – user2357112

+6

'Vector' kimse artık kullanmamalısınız bir miras, eskimiş, çirkin, nefret dolu sınıftır. – Lion

3
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

- aşağıdaki gibi

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.

4

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.

İlgili konular