为什么 Java 中的属性可以是公开的?
2022-09-01 00:42:27
众所周知,Java遵循面向对象的范式,其中数据封装说,对象的字段(属性)应该隐藏外部世界,并且只能通过方法访问,或者方法是外部世界类的唯一接口。那么,为什么可以在Java中将字段声明为公共字段,这将违反数据封装范式呢?
众所周知,Java遵循面向对象的范式,其中数据封装说,对象的字段(属性)应该隐藏外部世界,并且只能通过方法访问,或者方法是外部世界类的唯一接口。那么,为什么可以在Java中将字段声明为公共字段,这将违反数据封装范式呢?
我认为这是可能的,因为每个规则都有其例外,在某些情况下,每个最佳实践都可以被覆盖。
例如,我经常将公共静态最终数据成员公开为公共(例如,常量)。我不认为这是有害的。
我要指出的是,这种情况在Java以外的其他语言中也是如此:C++,C#等。
语言不需要总是保护我们免受自己的伤害。
在Oli的例子中,如果我这样写有什么害处?
public class Point {
public final int x;
public final int y;
public Point(int p, int q) {
this.x = p;
this.y = q;
}
}
它是不可变的,线程安全的。数据成员可能是公开的,但您不能伤害它们。
此外,这是一个肮脏的小秘密,“私有”在Java中并不是真正的私有。你总是可以使用反射来绕过它。
所以放松一下。这还不错。
为了灵活性。如果我不能写,那将是一个巨大的痛苦:
class Point {
public int x;
public int y;
}
将这一点隐藏在拦手和二传手后面几乎没有什么好处。