1

如果有以下课程...

/**
 * 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 不允许我为不带参数的函数调用分配哪些 ()。

4

2 回答 2

2

由于 1995 年左右做出的语言设计选择,Java 不允许您这样做。Java 的目标是成为“蓝领语言”,这意味着构造的总数应该很少,并且每个构造都应该像可能的。

顺便说一句,与其问自己“为什么 Java 不让我放弃括号”,不如问自己“为什么 Java 让我编写所有多余的 getter 和 setter?” 大多数其他语言会自动执行此操作。

getter/setter 的重点不是封装(如果您只是透明地获取/设置值,实际上没有封装),而是动态调度。与任何其他方法一样,访问器可以被覆盖;还有一些框架坚持使用它们而不是直接字段访问。

对我来说,选择拥有public final double字段就很好。查看GridBagConstraintsJSE 类中公共字段的示例。

于 2012-05-16T10:45:38.130 回答
0

当您考虑它时,代码将变得完全不可读。当你遇到类似的东西时foo.bar,你不会知道它是在访问一个字段,还是在调用一个方法。

它只有在你引入除了字段和方法之外的第三种构造:属性时才有效。如果 Java 支持属性,那么在没有属性的情况下访问它们()不会损害可读性。Java中没有类似属性的构造没有技术原因,这只是一个设计决定。

但是在没有参数的任何方法调用中允许省略括号是一个坏主意。

于 2012-05-16T10:45:33.207 回答