爲什麼要使用包可見(默認),除非類應該用Java公共包可見
Q
包可見
6
A
回答
0
您default
修改即能得到什麼,沒有任何訪問修飾符(即公共私人或保護),這意味着它在一個特定的包中都可見。所以,當你想讓你的課程只能通過自己的包裝進行訪問時,你應該選擇default
。
瞭解更多:Controlling Access
3
我understaning是包/默認訪問是包裝內部,即類,不構成封裝接口,即不應在包的外部使用的類。
7
正如Rostislav Matl所說,它對於何時不想構成包的界面的一部分非常有用。
舉個例子,假設你有一個包,它提供了一個接口和至少一個服務的具體實現。
使用此服務的人會關心您提供的界面並使用您提供的某個具體類,但除此之外,他們不會關心其他任何內容。我們的服務必須與數據庫交談,並且它需要能夠將來自數據庫查詢的結果映射到它自己的數據類型(它形成它的合同)。
我發現我經常創建包含私有助手類的包含實用程序類型方法或執行類似我們需要的映射的任務。默認情況下(包私有)的可見性是完美的,因爲你的包內的其他類可以使用這些助手,但包外沒有人可以看到它們,所以你可以隨時更改它們,只要你喜歡。
這是一個使用一些代碼的例子:
我們有我們的界面:
public interface UsefulService {
Collection<DataThings> getThings(Identifier id);
}
...我們的具體實施:
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;
}
}
然後,我們有我們的映射。我們不需要任何人的包外關心服務內部的工作,所以我們使用包私有可見,當我們希望把工作做好,我們可以有很多類:
class Mapper {
Collection<DataThings> mapFromDatabaseToServiceDomain(DatabaseQueryResult queryResult){
//magic to map objects goes here
}
}
,我們有益處是我們可以隨時改變這個Mapper類,但是我們想要或者刪除它或者創建新的包私有類,並且我們知道我們可以導致的唯一(立即)影響是在這個包內。即時效應是指編譯器錯誤和類似的嚴重事情。顯然,如果你改變了自己的行爲,那麼你可能會中斷你的服務,但這就是你的自動化測試套件所能抓住的:P
相關問題
- 1. 包可見測試
- 2. Java的嵌套包可見
- 3. 包不可見錯誤
- 4. 包裝僅可見內容
- 5. 子包中的可見性
- 6. 爲什麼sun.management.OperatingSystemImpl包可見?
- 7. OSGI包可見服務實現
- 8. eclipse:默認包始終可見
- 9. 模塊中的包可見性
- 10. 包的一些成員不可見 - Pycharm
- 11. 不同的java包和可見性
- 12. vb.net中Java的包可見性
- 13. SSIS包不可見DTUTIL進口
- 14. 爲什麼getComputedStyle包含可見性?
- 15. Bundle的導出包不可見
- 16. VisualStudio 2012外部包括可見性
- 17. AjaxControl工具包TabContainer可見性問題
- 18. Html.DropDownListFor使可見/不可見
- 19. 截取UIView的截圖,包括3個UITableView(可見+不可見)部分
- 20. JFrame內容區域大小在打包後可見並且可見
- 21. 見OSGi包
- 22. 在畫布上設置DrawingVisual的可見性(可見,不可見)
- 23. 是圖像可見或不可見
- 24. ASP使不可見元素可見
- 25. StackPanel可見性VS網格可見性
- 26. Android拖放可見/不可見
- 27. 在AppInventor中使ImageSprite可見/不可見
- 28. 可見和不可見與複選框
- 29. 溢出可見不可見在右邊
- 30. 硒可見,非可見元素(下拉)
讀一點背景會對你有幫助。 [用Java思考](http://www.mindview.net/Books/TIJ/)第5章。這已經全部寫完了。 – 2011-03-29 11:50:07
對於接口,默認可見度是公共的。 ;) – 2011-03-29 11:54:31