java中的嵌套多行注释

Posted

技术标签:

【中文标题】java中的嵌套多行注释【英文标题】:nested multiline comments in java 【发布时间】:2011-10-31 15:18:48 【问题描述】:

在编写实验代码时,我发现一次注释掉整个代码块非常有用。但是,我找不到在 Java 中执行此操作的合理方法,因为我经常以嵌套块被注释掉而告终。

在 C 或 C# 中,这很容易使用 #if 0#if false 实现

我似乎在 Java 中找不到任何这样的等价物——任何帮助都将不胜感激。谢谢!

【问题讨论】:

没有预处理器,因此 java 中没有 ifdef - 所以该方法不起作用。一个建议是编写一个函数来实现您的测试代码;让它在你想要删除时立即返回(出于调试目的) 大多数 IDE 都有一个函数,可以在所有选定行的开头添加和删除 //(我认为它是 eclipse 中的 ctrl+/,例如 IIRC)。但是,我不知道有什么办法可以在所有事情之外做一些事情,比如#if 0... 在方法内部你可以使用if (false) ,或者使用IDE功能将//放在块中的所有行之前(在eclipse ctrl-/选择代码块时,这是一个切换) 不管 Java 语言福音 (JLS) 可能宣称什么,它看起来都像是微不足道的解析器更改。这是“最被拒绝”的功能吗? 【参考方案1】:

我假设您想注释掉嵌套代码以进行调试或测试,对吧?因为在生产代码中留下大量注释掉的代码通常被认为是非常糟糕的风格。

嵌套 cmets 本身并不是 java 的一个特性。所以,你可以做什么?以下是一些不同的选项:

斜线斜线注释嵌套 我能想到的最好的方法是使用一个编辑器,它有一个热键来斜线注释掉整个代码块,因为 // 可以嵌套。 Eclipse 和 Netbeans 都具有这种支持,尽管它在 IDE 之间的工作方式存在细微差别,就它决定切换 cmets 与嵌套它们的时间而言。通常嵌套 // cmets 只要选择不相同就可以完成。

第三方预处理器也就是说,J2ME 在 Eclipse 中使用了预处理器,但我认为这对桌面 java 没有帮助。如果您搜索它们,似乎确实有 other preprocessors 为 eclipse 编写或兼容它们。但是,这肯定会阻碍可移植性,因为这不是标准的 Java 功能。

修改评论 我经常为快速嵌套评论需要做的另一件事(在 css 中更多的是 // cmets 而不是 java)是在最后两个之间添加一个空格结束内部注释*/ 的字符,这样java 就不会在内部注释的末尾结束外部注释。恢复原始评论不是太困难(但稍微手动)。嵌套的/* 通常会被解析器忽略,具体取决于它如何进行模式匹配。例如 /* 代码 /* 嵌套注释 */ 更多代码 */`

使用版本控制 您还可以轻松地使用大多数版本控制系统来保存代码副本以及要删除的代码。然后稍后使用版本控制 restore/diff/merge 来取回您删除的代码。通常,此解决方案被认为是最佳样式。尤其是如果这个被注释掉的代码需要长时间保持这种状态。

if (false) 如果您要大规模阻止的代码同时编译并在一个函数中运行,您可以通过在其周围添加 if 语句来轻松禁用它,条件将永远不会是真的,例如if (false) ... 显然,这永远不会通过任何类型的 lint 类型代码检查工具,但它快速简单 ;-)

【讨论】:

谢谢——我现在使用if (false) 选项。是的,这不是生产代码:)【参考方案2】:

评论不是为了留下死代码 - 它们是为了描述活代码。

对于需要这样做的极少数情况,使用 IDE 来注释您想要的行(CTRL + / 在 eclipse 中)就足够了。

如果这是一种常见做法,请重新考虑您的流程和代码。并随时删除代码并将其提交给 SCM。如果您需要,它不会丢失。

【讨论】:

我已经使用 Eclipse 好几年了,从来不知道ctrl-/。谢谢。 在开发过程中需要暂时禁用代码块真的不是那么“罕见”。恕我直言,Java 没有一种干净的方式来实现这一点是一个缺点。【参考方案3】:

您可以只使用 if(false)。 Java 并没有像 C 或 C++ 那样真正进行编译,但 Java 编译器应该足够聪明,可以跳过整个部分(一旦确定这个 if 语句永远不会评估为真)。这仅适用于注释掉函数中的代码。

或者,如果你有一个像 eclipse 或 notepad++ 这样好的 IDE,你可以使用内置的快捷键使用 // 注释掉多行。

Eclipse = ctrl + /(按下取消注释) N++ = ctrl + k (shift + crtl + k 取消注释)

【讨论】:

【参考方案4】:

仅适用于 Eclipser:

    选择要提交的行 一旦你提交它们,就按Ctrl + /(每行都以//开头) 选择您要提交的行(包括在步骤 1 中提交的行) 再次按Ctrl + /,您将全部提交

ps: 按Ctrl + / 一次将提交行,再按一次将取消提交。

【讨论】:

以上是关于java中的嵌套多行注释的主要内容,如果未能解决你的问题,请参考以下文章

问题008:java 中代码块的风格有几种?单行注释可否嵌套?多行注释可否嵌套?

C语言汇总2

Java详解注释&关键字&常量&变量&标识符

java注释

Java注释(Comment)

java基础: 注释的概念和分类