Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java编码约定:强制转换后空格的基本原理是什么?_Java_Coding Style - Fatal编程技术网

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

Java编码约定:强制转换后空格的基本原理是什么?,java,coding-style,Java,Coding Style,我只是想知道是否有人知道标准Java编码约定中这一特定项目背后的基本原理。在演员之后放置空格的说法如下: Object myObj = (Object) someThing; ^ 它的语法与C中的强制类型转换相同,在它们之后从来没有空格: Object myObj = (Object)someThing; ^ 我认为这是因为演员是一元运算符。在那里放置一个空间就像这样: int x = ++ y; w

我只是想知道是否有人知道标准Java编码约定中这一特定项目背后的基本原理。在演员之后放置空格的说法如下:

Object myObj = (Object) someThing;
                       ^
它的语法与C中的强制类型转换相同,在它们之后从来没有空格:

Object myObj = (Object)someThing;
                       ^
我认为这是因为演员是一元运算符。在那里放置一个空间就像这样:

int x = ++ y;
while (0 < ++ x) { ... }
intx=++y;
而(0<++x){…}
…这不是你通常看到的:

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

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

好的强制转换表达式不属于“15.15一元运算符”,而是有自己的副标题“15.16强制转换表达式”。它基本上不是指cast操作符,但是cast表达式和规范说“括号及其包含的类型有时称为cast操作符。”

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

Java程序中普遍存在一些编码约定,特别是在类和接口的命名(
camelcasennomes
)、方法(
useCammelcaseVerbs
)、变量(
camelcasennomes
)和常量(
CAPITALS
)方面。但除此之外,大多数项目都定义了自己的约定,即在何处放置括号和空格、使用多少缩进、在方法之间放置多少空行等。在项目中保持一致,但在其他方面使用您(和其他项目工作人员)认为最容易接受的约定。如果其他人不喜欢您的约定,他们可以使用众多格式化工具中的任何一种,自动将代码转换为自己的口味。

我个人的理由:

  • 在方法调用表达式的上下文中,参数列表绑定比强制转换更强,因此编写

    (foo) method(bar)
    
    而不是

    (foo)method(bar)
    
    考虑到双方在句法上的相似性

  • 在其他情况下,没有空间可能看起来很奇怪:

    (int)-(a * b) (int)-(a*b) 这实际上在C语言中更为相关,由于typedefs,您可能无法立即判断左侧是否为石膏

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


  • Java
    不是
    C
    ,因此任何比较都是没有意义的,这就像问为什么草莓的种子在外面,而所有其他水果的种子都在里面。等价谬误;Java语法看起来像C,所以它应该和C完全一样,这是错误的……除了在这个例子中是一个人做出了决定,这意味着这是有原因的。只是好奇是否有原因,或者是否因为“Java不是C”而完全是武断的。对话应该按照“Java编码约定”结束。不幸的是,这就是它的全部。好吧,谈论C是有道理的,因为Java的语法在很大程度上是基于C的,但是,是的,这将归结为询问是谁编写了编码约定,或者试图找到他们在做出决定时的基本原理的文档。我编辑了这篇文章,试图让它不那么固执己见或者“这太糟糕了,对吧”…这真的很有趣。谢谢你。有趣的是,在该部分中,它仍然被称为“演员操作员”。