如果有以下课程......
/**
* Two dimensional cartesian point.
*/
public class Point {
public final double x;
private final double y;
public double y(){
return this.y;
}
}
我可以检索以下Point.x或Point.y()的值 我认为在OO语言中通过不直接访问而不是使用访问器来封装数据是一种很好的做法,但似乎使用直接字段访问更加正常和可读。
为什么Java不允许我分配()用于不带参数的函数调用。
答案 0 :(得分:2)
由于1995年左右的语言设计选择,Java不允许你这样做.Java的目标是成为一个“蓝领语言”,这意味着应该有一个较低的总结构数,每个结构应该是尽可能明显。
BTW而不是问自己“为什么Java不让我放弃parens”,为什么不问自己“为什么Java会让我写下所有那些冗余的getter和setter?”大多数其他语言自动。getter / setter的重点不在于封装(如果你只是透明地获取/设置值,实际上没有封装),而是动态调度。与任何其他方法一样,访问器可以被覆盖;还有一些框架坚持使用它们而不是直接的现场访问。
对我来说,拥有public final double
字段的选择就好了。查看GridBagConstraints
以获取JSE类中公共字段的示例。
答案 1 :(得分:0)
当你考虑它时,代码将变得完全不可读。当你遇到像foo.bar
这样的东西时,yhou不会知道它是在访问某个字段,还是在调用方法。
除了字段和方法之外,它只能引入第三种构造:属性。如果Java支持的属性,在没有()
的情况下访问它们不会损害可读性。没有技术原因可以解释为什么Java中没有类似属性的结构,这只是一个设计决策。
但允许在没有参数的任何方法调用中省略括号是一个坏主意。