【发布时间】:2011-03-14 11:42:56
【问题描述】:
我希望了解为什么Java 设计人员选择以这种方式实现函数声明。我经常听到有人说 Java 的设计者希望避免在其他语言(例如 C++)中做出糟糕的设计选择——通过类进行多重继承和运算符重载请记住——为了使面向对象模型尽可能简单并鼓励良好的编程实践。在这种情况下是这样吗?此功能是否过于昂贵而无法相对实现它提供的(不可否认的边际)收益?
问题是,我看不到(而且我还在学习,所以这可能意味着蹲下!:D)允许在函数声明中省略形式参数名称的显着实现开销。我至少能想到一个这个特性不会受到伤害的例子:定义抽象函数。
无论如何,很高兴听到人们对 SO 的一些想法。顺便说一句,Java 语言规范的the relevant section (8.4.1) 解释了什么,但没有谈论为什么。
编辑:添加代码 sn-p:
abstract void someFunc(int, int, int);
(我使用了一个抽象函数,因为这是我能想到的一个简单的例子)。
【问题讨论】:
-
Java 设计倾向于等待一个令人信服的理由去做某事(然后再考虑几年;)why not 论点不足以包含某物。通常还有其他方法可以做同样的事情(如果不是那么优雅),例如使用重载代替,这使得案例不那么引人注目。
-
特别是 对于
abstract方法,我想说参数名称是必不可少的。不是为了 curse 的编译器(事实上默认.class文件甚至不包含方法参数名称),而是为了开发人员!如果不是通过名称,你怎么知道每个参数的作用? -
@Joachim,是的,我明白你在说什么。 IMO,它很好地解释了为什么良好的编码实践必须需要使用正式名称,但它似乎并不能令人信服地解释为什么你会不想要拥有这个功能完全的语言。例如,如果我正在编写简单、自包含的代码(我知道没有人会使用它),我不介意没有正式名称。彼得的回答对我来说更直观:没有足够令人信服的理由来拥有这个功能。
-
两个 cmets:第一:语言的每一个添加特性倍增复杂性(不仅仅是增加它),因为它与所有其他特性交互(看看有多少角落案例泛型已经引入)。除非有 strong 案例 for 添加功能,否则应该忽略它。第二:即使没有其他人必须修改该代码,您也必须在几周/几个月内完成,而且您将很难阅读它。如果它真的是一次性代码,那么学习一些 Groovy 并在很短的时间内编写您的代码 ;-)
标签: java methods arguments declaration