2014-08-27 132 views

回答

0

Color.java文件的source code顯示沒有Google工程師明確寫出Color類的公共構造函數。

Color類的API documentation確實列出了一個公共構造函數,但Java有一個implicit default constructor,這是文檔中列出的構造函數。

真正可能的問題在這裏要麼/或,

  • 爲什麼谷歌Android文檔列表隱含的默認構造函數的類文件的構造函數部分?
  • 爲什麼Java有一個隱式的默認構造函數,當我可能使一個只有靜態成員的類?

對於第一點,我不認爲這是谷歌決定列出隱式默認構造函數的任何錯誤或不良設計決定。他們可以在類中定義一個構造函數來限制對任何構造函數的訪問,但這隻需要額外的代碼,並且無用地爲僅具有靜態成員的類創建默認構造函數不會導致對類的任何濫用。

對於第二點,編譯器優化可能有意義,以防止只有靜態成員的類中存在任何隱式默認構造函數,但這是另一個線程的問題。

tl; dr Nope,不是一個錯誤。

+0

@ dragon66我仍然會爭辯說,這不是一個個人開發者需要解決的問題,而是您可能會或可能不會喜歡的一種語言功能。其他語言以不同方式處理。如果你真的不喜歡它,你可以去做一個拉請求,Android是開源的。 – yiati 2015-11-23 15:58:34

+0

不,即使有了私有構造函數,你仍然可以用反射來實例化它。單個開發人員解決此問題的唯一方法是實現私有構造函數,並在私有構造函數中引發異常。這對個人開發人員來說不是問題。正如我在第二點討論的那樣,圍繞這一點可能會有一個編譯器優化,但這對於單個開發人員來說仍然不是問題。 – yiati 2015-11-24 04:40:15

+0

反思不是黑客攻擊 – yiati 2015-12-07 05:32:17

0

可能的一致性和潛在的將來使用是工程師編寫構造函數的原因,即使它沒有任何作用。但是,工程師可能沒寫過構造函數。如果沒有給出構造函數,編譯器會創建一個默認的公共構造函數。

查看答案given here。它鏈接到this

可能在某種程度上自動生成的文檔可能會通知您默認構造函數的存在,即使工程師沒有創建該文檔。

相關問題