2013-11-25 13 views
1

我遇到的情況,在一些類級別聲明的最終變量在某些情況下是可選的。最後一個可選的成員變量

這意味着我有不同的構造。其中一些必須使用空值保留成員變量。

由於我已經聲明變量爲final,我不得不在構造函數中初始化這些變量。所以我必須添加var = null;聲明在構造函數中。

但明確將變量分配給null被認爲是一種不好的做法,像PMD這樣的工具會將其報告爲違規。 (在PMD中有爭議的規則,但不想關閉它,因爲我不希望在我的代碼的其他區域實行空分配)

任何其他建議或良好實踐可以實現此目的嗎?

+2

嗯....聞起來像一個繼承問題。 :) –

+1

一個簡單的代碼示例演示您的問題將更加有用:) – prime

回答

0

您可以使用構造函數鏈,傳遞null到未在您的實例中使用的值。 (如果我們正在討論繼承,或者在同一個類中使用不同的構造函數,則可以使用超級構造函數。)畢竟,我會重新考慮類的設計,例如將可選部分提取到不同的類。

0

實例變量被賦予默認值(在自定義對象的情況下爲null)。

所以,除非你真的爲最終變量分配一些值,爲什麼還要分配空值?

正如用戶在上面的評論中指出的,對於最終變量並不適用。那麼可以做些什麼來定義一個無參數構造函數,並將所有最終值設置爲null。

現在在單獨的arg構造函數中,使用this()作爲第一個語句,調用此默認構造函數..然後您可以根據傳遞的參數來指定值。

+0

當變量被標記爲final時,不會。我們必須在構造函數中爲最終變量顯式地賦值語句。其他編譯器會抱怨。 –