2011-03-29 36 views
6

sınıf java kamu olmalıdır sürece kullanım paketi görünürlük (varsayılan),paket görünürlük

+1

Arka planın biraz okunması, örn. [Java'da Düşünmek] (http://www.mindview.net/Books/TIJ/) bölüm 5. Bu daha önce yazılmıştır. –

+1

Arabirimler için varsayılan görünürlük geneldir. ;) –

cevap

0

herhangi erişim değiştiricisi (yani kamu özel veya korumalı) olmaksızın default değiştirici yani almak ne, bu demektir Neden belirli bir paket içinde herkes tarafından görülebilir. Yani, sınıfınızın sadece kendi paketinde erişilebilir olmasını istediğinizde, default one için gitmelisiniz.

Devamı: Controlling Access

3

Benim understaning, paket/varsayılan erişim paketi iç yapıları içindir paket arayüzünü, paketin dışında kullanılmamalıdır yani sınıflar oluşturmuyor yani sınıflar olduğunu.

7

Rostislav Matl'in dediği gibi, paketinizin arayüzünün bir parçasını oluşturmadığınız bir şey yapmak istediğinizde kullanışlıdır. Örnek olarak, bir paketiniz olduğunu hayal edin ve bir arabirim ve bir hizmetin en az bir somut uygulamasını sağlar.

Bu hizmeti kullanan kişiler, sağladığınız arabirimi önemser ve sağladığınız somut sınıflardan birini kullanır, ancak bunun ötesinde çok daha fazla önem vermezler. Hizmetimiz bir veri tabanından söz etmek zorundadır ve bunun sonucu, veri tabanındaki sorgulardan kendi veri tipine (sözleşmesini oluşturan) göre eşleştirebilmelidir.

Düzenli olarak, yardımcı program yöntemleri içeren veya gereksinim duyduğumuz eşleme gibi görevleri gerçekleştiren paket özel yardımcı sınıfları oluşturduğumu fark ettim. Varsayılan (paket özel) görünürlüğü bunun için mükemmeldir çünkü paketinizdeki diğer sınıflar bu yardımcıları kullanabilir, ancak paketin dışındaki hiç kimse onları göremez ve böylece istediğiniz zaman onları değiştiremezsiniz.

Bizim arayüze sahip:

Bu bazı kod kullanarak bir örnektir

public interface UsefulService { 
    Collection<DataThings> getThings(Identifier id); 
} 

... ve somut uygulama:

public class JdbcUsefulServiceImpl implements UsefulService { 

    //We can break the code for the mapping out into its own class 
    private Mapper mapper; 

    @Override 
    public Collection<DataThings> getThings(Identifier id){ 
     DatabaseQueryResult queryResult = //Code to hit a database and return objects from that domain model 
     Collection<DataThings> result = mapper.mapFromDatabaseToServiceDomain(queryResult); 
     return result; 
    } 
} 

Sonra bizim eşleyici var. Biz hizmet biz paket özel görünürlük kullanmak böylece dahili olarak çalışır umurumda paketin dışında kimseye ihtiyacım yok ve biz işi istediğiniz gibi biz gibi birçok sınıfları sahip olabilir:

class Mapper { 
    Collection<DataThings> mapFromDatabaseToServiceDomain(DatabaseQueryResult queryResult){ 
     //magic to map objects goes here 
    } 
} 

Elimizdeki fayda Bu Mapper sınıfını her zaman değiştirebiliriz ya da silebilir veya yeni paket özel sınıflar oluşturabiliriz ve neden olabileceğimiz tek (dolaylı) etkilerin bu pakette olduğunu biliyoruz. Anında etkileri ile derleyici hataları ve bunun gibi ciddi şeyler demek istiyorum. Davranışını değiştirirseniz, hizmetinizi bozabilirdiniz, ancak otomatik test paketinizin yakalanması gereken şey budur: P

İlgili konular