爲什麼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. 爲什麼java.io.FileDescriptor的構造函數是公共的?
- 5. 爲什麼new()約束需要公共構造函數?
- 6. 爲什麼公共構造函數應該在javabean類中提供
- 7. 具有成員函數的構造函數與具有公共變量的類的結構
- 8. 公共構造函數和靜態構造函數
- 9. 子類構造函數 - 爲什麼必須爲子類構造函數存在默認構造函數?
- 10. Room Android:實體和Pojos必須具有可用的公共構造函數
- 11. 爲什麼默認構造函數在父類中是必需的,如果它具有參數構造函數?
- 12. AutoValue - 公共構造函數可能
- 13. C++只繼承公共構造函數
- 14. 在C#抽象類中的公共構造函數的實用性是什麼?
- 15. 爲什麼具有繼承構造函數的類還會獲得合成的默認構造函數?
- 16. 爲什麼Enum構造函數不能具有受保護或公共訪問修飾符
- 17. 爲什麼我不能強制派生類具有無參數構造函數?
- 18. (C++)在靜態類中做什麼更好:將構造函數設置爲私有還是公共刪除?
- 19. 什麼在一個內部類的公共構造意味着
- 20. 爲什麼這個類有兩個構造函數?
- 21. 爲什麼Inet * Address類沒有可見的構造函數?
- 22. 什麼類型是構造函數?
- 23. 必須有一個公共無參數構造函數,它不?
- 24. 爲什麼QObject :: findChildren返回具有公共基類的子代?
- 25. 抽象類中'公共'構造函數的相關性
- 26. 公共成員vs C#中類的構造函數?
- 27. 構造函數調用具有參數的構造函數
- 28. 懶惰初始化類型沒有公共參數的構造函數
- 29. 爲什麼調用基構造函數?
- 30. 爲什麼構造函數未定義?
您可能需要追蹤那些在多年前編寫'Color'類的Google工程師,並詢問。 – CommonsWare 2014-08-27 19:34:54