如果有以下课程...
/**
* 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() 检索值并且可读。
为什么 Java 不允许我为不带参数的函数调用分配哪些 ()。
由于 1995 年左右做出的语言设计选择,Java 不允许您这样做。Java 的目标是成为“蓝领语言”,这意味着构造的总数应该很少,并且每个构造都应该像可能的。
顺便说一句,与其问自己“为什么 Java 不让我放弃括号”,不如问自己“为什么 Java 让我编写所有多余的 getter 和 setter?” 大多数其他语言会自动执行此操作。
getter/setter 的重点不是封装(如果您只是透明地获取/设置值,实际上没有封装),而是动态调度。与任何其他方法一样,访问器可以被覆盖;还有一些框架坚持使用它们而不是直接字段访问。
对我来说,选择拥有public final double
字段就很好。查看GridBagConstraints
JSE 类中公共字段的示例。
当您考虑它时,代码将变得完全不可读。当你遇到类似的东西时foo.bar
,你不会知道它是在访问一个字段,还是在调用一个方法。
它只有在你引入除了字段和方法之外的第三种构造:属性时才有效。如果 Java 支持属性,那么在没有属性的情况下访问它们()
不会损害可读性。Java中没有类似属性的构造没有技术原因,这只是一个设计决定。
但是在没有参数的任何方法调用中允许省略括号是一个坏主意。