我遇到的情況,在一些類級別聲明的最終變量在某些情況下是可選的。最後一個可選的成員變量
這意味着我有不同的構造。其中一些必須使用空值保留成員變量。
由於我已經聲明變量爲final,我不得不在構造函數中初始化這些變量。所以我必須添加var = null;聲明在構造函數中。
但明確將變量分配給null被認爲是一種不好的做法,像PMD這樣的工具會將其報告爲違規。 (在PMD中有爭議的規則,但不想關閉它,因爲我不希望在我的代碼的其他區域實行空分配)
任何其他建議或良好實踐可以實現此目的嗎?
我遇到的情況,在一些類級別聲明的最終變量在某些情況下是可選的。最後一個可選的成員變量
這意味着我有不同的構造。其中一些必須使用空值保留成員變量。
由於我已經聲明變量爲final,我不得不在構造函數中初始化這些變量。所以我必須添加var = null;聲明在構造函數中。
但明確將變量分配給null被認爲是一種不好的做法,像PMD這樣的工具會將其報告爲違規。 (在PMD中有爭議的規則,但不想關閉它,因爲我不希望在我的代碼的其他區域實行空分配)
任何其他建議或良好實踐可以實現此目的嗎?
您可以使用構造函數鏈,傳遞null到未在您的實例中使用的值。 (如果我們正在討論繼承,或者在同一個類中使用不同的構造函數,則可以使用超級構造函數。)畢竟,我會重新考慮類的設計,例如將可選部分提取到不同的類。
實例變量被賦予默認值(在自定義對象的情況下爲null)。
所以,除非你真的爲最終變量分配一些值,爲什麼還要分配空值?
正如用戶在上面的評論中指出的,對於最終變量並不適用。那麼可以做些什麼來定義一個無參數構造函數,並將所有最終值設置爲null。
現在在單獨的arg構造函數中,使用this()
作爲第一個語句,調用此默認構造函數..然後您可以根據傳遞的參數來指定值。
當變量被標記爲final時,不會。我們必須在構造函數中爲最終變量顯式地賦值語句。其他編譯器會抱怨。 –
嗯....聞起來像一個繼承問題。 :) –
一個簡單的代碼示例演示您的問題將更加有用:) – prime