【发布时间】:2011-06-24 01:11:09
【问题描述】:
在使用 C++ 和 C# 一段时间后,我正在开发一个 Java 项目,但我对构造函数中字段初始化的最佳实践存有疑问。基本上,假设我有一个简单的 Point 类。在 C++ 中,我在构造函数中的字段初始化如下所示:
class Point {
public:
// Default constructor
Point(double x, double y) : x(x), y(Y) { }
protected:
// Coordinates
double x, y;
};
在 C# 中 ...
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;
}
}
在 Java 中...最佳实践建议为必须从外部访问的字段定义 getter / setter。但建议在课堂内也使用它们吗?疑问来自这样一个事实,即 Eclipse 似乎很乐意将类代码中的每个 this.field = field 转换为具有 getter/setter 的字段的 setField(field),即使我从类代码内部读取/写入(因此我不会需要使用类接口)。
这基本上为每次访问添加了一个函数调用。现在,除了设置字段涉及一些其他操作(即验证、处理等)的情况之外,这还有什么意义吗?常识会建议使用getter / setter类似于使用C#属性,但这里我特别质疑C#的自动属性,它只涉及基本访问,没有任何处理。所以问题是:在类代码内部调用 getter / setter 有什么好处吗?
谢谢
图努兹
【问题讨论】:
标签: java oop constructor initialization field