私はC++とC#を使用している期間の後にJavaプロジェクトを作成しています。コンストラクタのフィールド初期化のベストプラクティスについては疑問があります。基本的に、単純なPointクラスがあるとします。 C++では、コンストラクタでの私のフィールドの初期設定は次のようになります... C#のでクラスコンストラクタのフィールド初期化:直接または "setter"を介して?
class Point {
public:
// Default constructor
Point(double x, double y) : x(x), y(Y) { }
protected:
// Coordinates
double x, y;
};
Javaでは
class Point {
// Coordinates, with automatic properties
public double X { get; protected set; }
public double Y { get; protected set; }
// Default constructor
Point(double x, double y) {
X = x;
Y = y;
}
}
を...ベストプラクティスがでなければならないフィールドのgetter/setterを定義することをお勧め外部からアクセスする。しかし、クラス内からもそれらを使用することをお勧めします。この疑問は、Eclipseがクラスコード内の各コードをsetField(field)
に変換するのが快適であるという事実から来ます。したがって、クラスコードの中から読み書きが行われても、getter/setterを持つフィールドのためです。(したがって、クラスインタフェース)。
これは基本的に、各アクセスに対して関数呼び出しを追加します。さて、フィールドの設定に他の操作(つまり、検証、処理など)が必要な場合を除いて、これは意味がありますか?常識的には、getters/settersの使用はC#プロパティの使用に似ていますが、ここではC#のという自動プロパティについては何も処理せずに基本アクセスしか含まないことに疑問を呈しています。だから問題は:getters/setterをクラスコードの中から追加の処理をしないで呼び出すことができますか?
は
Tunnuz
これがポイントです。 +1はより明確な答えです。 –
"明日は少し早すぎる必要があるかもしれませんか?" – tunnuz