Java 编码约定:强制转换后空格的基本原理是什么?

问题描述 投票:0回答:3

我只是想知道是否有人知道标准 Java 编码约定中这个特定项目背后的基本原理Java 编码约定 规定在强制转换后放置一个空格,如下所示:

Object myObj = (Object) someThing;
                       ^

它与 C 中的强制转换语法相同,后面没有空格:

Object myObj = (Object)someThing;
                       ^

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

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

...这不是您通常看到的东西:

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

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

java coding-style
3个回答
4
投票

Java语言规范“表达式”中,强制转换表达式不属于“15.15一元运算符”,但有一个自己的副标题“15.16强制转换表达式”。它主要不被称为强制转换运算符,而是强制转换表达式,并且规范中表示“括号及其包含的类型有时被称为强制转换运算符。”


4
投票
我个人的理由:

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

    (foo) method(bar)
    而不是

    (foo)method(bar)
    考虑到双方的语法相似性。

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

    (int)-(a * b)
    这实际上在 C 中更相关,由于 typedefs,你可能无法立即判断左侧是否是强制转换。

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


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

Java 程序中有一些普遍存在的编码约定,特别是关于类和接口 (

CamelCaseNouns

)、方法 (
useCamelCaseVerbs
)、变量 (
camelCaseNouns
) 和常量 (
CAPITALS
) 的命名)。但除此之外,大多数项目都定义了自己的约定,包括在哪里放置括号和空格、使用多少缩进、在方法之间放置多少空行等。在项目内保持一致,但在其他方面使用您(和从事该项目的其他人)感觉最舒服。如果其他人不喜欢您的约定,他们可以使用众多格式化工具中的任何一个来自动将代码转换为他们自己的口味。

© www.soinside.com 2019 - 2024. All rights reserved.