【问题标题】:How are variable names useful in a declaration in an interface?变量名在接口声明中有何用处?
【发布时间】:2014-06-13 16:58:02
【问题描述】:

如果我们声明一个接口,我们也必须指定变量名。

例如在这个示例中

public interface ZipCodeServer {
    public String getCityName(int zipCode);
}

zipCode 的目的是什么。理想情况下,我只想拥有

public interface ZipCodeServer {
    public String getCityName(int);
}

不指定其名称。如果我不声明它的名字,我会得到一个编译时错误。谁能指出在接口中强制声明变量名的确切目的

编辑:我实际上并没有试图说服任何人变量名不应该存在。我在问强制执行的目的是什么。它对编译器有用吗?

【问题讨论】:

  • 参数名称的目的是让代码的作者有机会识别参数的用途。
  • 您需要记录参数的用途。有时一个简单的名称就足够了文档,如果不是,你仍然需要一个简写来识别参数(并且“第 [i-th] 参数”对此非常糟糕)。
  • 我同意,但如果方法名称本身就足够了,那不应该是可选的,而不是强制性的。
  • 将它们设为可选会增加句法和语义的复杂性,需要额外的实现工作,并且不会产生任何对体面的代码的好处。功能从您知道的 -100 分开始。
  • 嗯,接口通常定义合同,对吧?如果您有不同的实现并定义参数以表示不同的事物,那么接口将远不如现在有用,并且实际上可能被认为是这种方式被破坏了。拥有名称可以绝对清楚地说明什么参数应该意味着什么。我真的不认为留下名字有什么好处,而要求它有好处。

标签: java oop interface programming-languages language-design


【解决方案1】:

编译器不需要它们。它们是人类所需要的。接口是合同,它们通常具有 cmets(在您的情况下:javadocs),通常引用特定参数。变量名可帮助您了解函数在做什么。

因为没有变量名,你不知道构造函数在做什么

Point(double, double)

它是在笛卡尔坐标系还是极坐标系中构造一个点?写的时候就清楚多了:

Point(double x, double y)

Point(double distance, double radians)

【讨论】:

    【解决方案2】:

    ​可能只需要一个参数就可以了。但是如何理解这样的方法呢?

    public String getSome(int, int, int);
    

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2014-09-07
      相关资源
      最近更新 更多