爲什麼Android Color類在所有成員都是靜態時都有公共構造函數?這只是一個錯誤嗎?Android:爲什麼Color類具有公共構造函數?
回答
Color.java文件的source code顯示沒有Google工程師明確寫出Color類的公共構造函數。
Color類的API documentation確實列出了一個公共構造函數,但Java有一個implicit default constructor,這是文檔中列出的構造函數。
真正可能的問題在這裏要麼/或,
- 爲什麼谷歌Android文檔列表隱含的默認構造函數的類文件的構造函數部分?
- 爲什麼Java有一個隱式的默認構造函數,當我可能使一個只有靜態成員的類?
對於第一點,我不認爲這是谷歌決定列出隱式默認構造函數的任何錯誤或不良設計決定。他們可以在類中定義一個構造函數來限制對任何構造函數的訪問,但這隻需要額外的代碼,並且無用地爲僅具有靜態成員的類創建默認構造函數不會導致對類的任何濫用。
對於第二點,編譯器優化可能有意義,以防止只有靜態成員的類中存在任何隱式默認構造函數,但這是另一個線程的問題。
tl; dr Nope,不是一個錯誤。
@ dragon66我仍然會爭辯說,這不是一個個人開發者需要解決的問題,而是您可能會或可能不會喜歡的一種語言功能。其他語言以不同方式處理。如果你真的不喜歡它,你可以去做一個拉請求,Android是開源的。 – yiati 2015-11-23 15:58:34
不,即使有了私有構造函數,你仍然可以用反射來實例化它。單個開發人員解決此問題的唯一方法是實現私有構造函數,並在私有構造函數中引發異常。這對個人開發人員來說不是問題。正如我在第二點討論的那樣,圍繞這一點可能會有一個編譯器優化,但這對於單個開發人員來說仍然不是問題。 – yiati 2015-11-24 04:40:15
反思不是黑客攻擊 – yiati 2015-12-07 05:32:17
可能的一致性和潛在的將來使用是工程師編寫構造函數的原因,即使它沒有任何作用。但是,工程師可能沒寫過構造函數。如果沒有給出構造函數,編譯器會創建一個默認的公共構造函數。
查看答案given here。它鏈接到this。
可能在某種程度上自動生成的文檔可能會通知您默認構造函數的存在,即使工程師沒有創建該文檔。
- 1. 爲什麼Android的android.graphics.Color有一個公共構造函數?
- 2. 爲什麼Calendar類沒有公共構造函數?
- 3. 密封類 - 爲什麼要刪除公共構造函數?
- 4. 嵌套類的公共構造函數
- 5. 爲什麼new()約束需要公共構造函數?
- 6. 爲什麼java.io.FileDescriptor的構造函數是公共的?
- 7. 靜態,內部和公共構造函數有什麼區別?
- 8. 爲什麼公共構造函數應該在javabean類中提供
- 9. 內部類和公共構造函數 - 爲什麼它與Activator.CreateInstance一起使用?
- 10. 具有成員函數的構造函數與具有公共變量的類的結構
- 11. 一個類可以有公共和私有構造函數嗎?
- 12. 在構造函數上創建Android本地公共類textview
- 13. Builder模式,具有公共構造vaild
- 14. 必須是具有公共無參數構造函數的非抽象類型
- 15. 公共構造函數和靜態構造函數
- 16. 子類構造函數 - 爲什麼必須爲子類構造函數存在默認構造函數?
- 17. Room Android:實體和Pojos必須具有可用的公共構造函數
- 18. 爲什麼System.Data.SqlClient.SqlDataReader沒有構造函數
- 19. 在類中使用構造函數和公共函數
- 20. 爲什麼IllegalAccessError不具有雙參數構造函數?
- 21. 爲什麼java.awt.Dimension具有公共變量?
- 22. 爲什麼默認構造函數在父類中是必需的,如果它具有參數構造函數?
- 23. 爲什麼Java不提供默認構造函數,如果類具有參數化構造函數?
- 24. C++只繼承公共構造函數
- 25. AutoValue - 公共構造函數可能
- 26. 在C#抽象類中的公共構造函數的實用性是什麼?
- 27. 爲什麼像java正則表達式類的類沒有任何公共構造函數?
- 28. 爲什麼具有繼承構造函數的類還會獲得合成的默認構造函數?
- 29. 爲什麼類的構造函數有新的其他類?
- 30. Java:爲什麼構造函數具有訪問修飾符?
您可能需要追蹤那些在多年前編寫'Color'類的Google工程師,並詢問。 – CommonsWare 2014-08-27 19:34:54