2017-05-12 5 views
0

以下のコードのコンストラクタで初期化文を削除する方が良いですか?文字列と列挙型の変数をJavaで明示的に初期化しますか?

class Dog { 

    private String name; 
    private Type type; 

    public Dog() { 
     this.name = null; 
     this.type = null; 
    } 

    public static Enum Type { 
     large, medium, small; 
    } 
} 
+3

少なくとも、どちらもデフォルトでは「null」に設定されています。 – Marvin

+0

ほんの少しだけはっきりしていますか? – user697911

+0

私はそうは思いませんが、明らかにいくつかの人にとってはそうです。一方、私は一度、(非常に特殊なケースではあるが)バグ_caused by_の初期化を 'null'に追跡するのに数時間を費やした。 – Marvin

答えて

0

このような種類の質問は、多くの意見を生成する傾向があり、この回答も同じです。

標準値(null、0、...)と等しい場合でも、すべての(非最終)変数のデフォルト値を宣言します。その理由は、明示的に定義されない限り、変数はデフォルトでnullになることが分かりやすくなりました。

だからそれは次のようになります。

class Dog { 

    private String name = null; 
    private Type type = null; 

    public Dog(){} 

    public static Enum Type { 
     large, medium, small; 
    } 
} 

が、これはクリーンなコードについてだけの意見であることを忘れないでください。両方ともまったく同じように動作します。

+0

あなたは@Alexの答えを受け入れるべきです。私は賛否両論のすべての事例を明確な方法で説明します。 –

1

それは、どんな意味で良いでしょうか?

上記以外の短いクリーンコードを評価すると、これは良好です。ここでは例です:

class Dog { 
private String name; 
private Type type; 

public static enum Type { 
    large, medium, small; 
} 

初期化されていないObject sがnullとして始めるので、これは動作します。空のコンストラクタも指定する必要はありません。

あなたが明快に価値が、それでも、その後

class Dog { 
    private String name = null; 
    private Type type = null; 

    public Dog() {} 

    public static enum Type { 
     large, medium, small; 
    } 
} 

、できるだけ短いコードを維持したい場合は、他の(経験の少ない)開発者は、値が何であるかをはっきりと見ることができ、およびコンストラクタは明確であるため、優れています定義された。将来的にロジックを追加するには値/ロジック

  • 柔軟性から

    • 明らかに別の宣言に必要な(拡張性)だけ

    も独自の利点があり、コンストラクタで定数値を初期化しますそれぞれの状況の長所と短所を評価し、好きなものを見てください。唯一の例外は、既存のコードベースで作業する場合です。この場合、規約/スタイルガイドを守ってください。

  • 関連する問題