【问题标题】:Java coding conventions: what is the rationale for a space after a cast?Java 编码约定:强制转换后空格的基本原理是什么?
【发布时间】:2015-07-01 18:39:58
【问题描述】:

我只是想知道是否有人知道标准 Java 编码约定中这个特定项目背后的基本原理Java coding conventions 表示要在演员表后放置一个空格,如下所示:

Object myObj = (Object) someThing;
                       ^

这与 C 中的强制转换语法相同,后面永远不会有空格:

Object myObj = (Object)someThing;
                       ^

我认为这是因为强制转换是一元运算符。放一个空间就像这样做:

int x = ++ y;
while (0 < ++ x) { ... }

...这不是你通常看到的:

int x = ++y;
while (0 < ++x) { ... }

这似乎是 Java 独有的,所以如果有人有任何见解,我很想听听。

【问题讨论】:

  • Java 不是C 所以任何比较都是没有实际意义的,这就像问为什么草莓的种子在外面,而所有其他水果都在里面。等价谬误; Java 语法看起来像 C,所以它应该和 C 完全一样,这是错误的。
  • ...除了在这种情况下,一个 做出了决定,这意味着它有一些原因。只是好奇是否有原因,或者是否因为“Java 不是 C”而完全是任意的。
  • 对话应该只是按照“Java 编码约定说的。”结束。不幸的是,这就是它的全部内容。
  • 好吧,关于 Java 的语法很大程度上基于 C 的事实,谈论 C 是有效的,但是,是的,它归结为询问编写编码约定的人,或者试图找到一些关于他们做出决定时的理由的文件。
  • 我编辑了这篇文章,试图让它不那么固执己见或“这很糟糕,对吧”......

标签: java coding-style


【解决方案1】:

Java Language Specification "Expressions" 中的转换表达式不属于“15.15 一元运算符”,但有自己的副标题“15.16 转换表达式”。它主要不被称为强制转换运算符,而是强制转换表达式,并且规范说“括号和它们包含的类型有时被称为转换运算符。”

【讨论】:

  • 这真的很有趣。感谢那。有趣的是,在该部分中,它仍然被称为“cast operator”。
【解决方案2】:

您链接到的文档写于 1997 年,给人的印象是一份关于 C 编码约定的文档(对于某些项目或公司),被匆忙翻译成 Java。许多根据文档“不推荐”的结构实际上被 Java 语法所禁止。

Java 程序中普遍存在一些编码约定,特别是在类和接口 (CamelCaseNouns)、方法 (useCamelCaseVerbs)、变量 (camelCaseNouns) 和常量 (@) 的命名方面987654324@)。但除此之外,大多数项目都定义了自己的约定,例如在哪里放置括号和空格、使用多少缩进、在方法之间放置多少空行等。在项目中保持一致,否则使用您(和从事该项目的其他人)感觉最舒服。如果其他人不喜欢您的约定,他们可以使用众多格式化工具中的任何一种来自动将代码转换为自己的口味。

【讨论】:

    【解决方案3】:

    我的个人理由:

    1. 在方法调用表达式的上下文中,参数列表的绑定比强制类型转换强,因此这样写是有意义的

      (foo) method(bar)
      

      而不是

      (foo)method(bar)
      

      考虑到双方的句法相似性。

    1. 在其他情况下,没有空格可能看起来很奇怪:

      (int)-(a * b)
      

      这实际上在 C 中更相关,由于 typedef,您可能无法立即判断左侧是否为强制转换。

    2. 强制转换首先对表达式的类型进行操作,并且仅作为类型转换的副作用(如果有的话)对值进行操作。从这个意义上说,强制转换比常规一元运算符的操作级别更高。因此,在我看来,通过将它们与它们所操作的表达式分开来表明这一事实是合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 2016-05-31
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多