Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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_Comments_Line_Toggle_Block - Fatal编程技术网

Java 有没有更好的方法来切换注释代码?

Java 有没有更好的方法来切换注释代码?,java,comments,line,toggle,block,Java,Comments,Line,Toggle,Block,如果我有两块代码,并且我想在它们之间切换(比如,出于测试目的),我意识到您可以使用如下注释: //* <chunk #1, active code here> //*/ /* <chunk #2, commented out code here> //*/ public class DebugOptions { public static final boolean DEBUG_FLAG = true; }; 这显然是有效的,因为行注释实际上注释出了/*,所以块

如果我有两块代码,并且我想在它们之间切换(比如,出于测试目的),我意识到您可以使用如下注释:

//*
<chunk #1, active code here>
//*/

/*
<chunk #2, commented out code here>
//*/
public class DebugOptions {
  public static final boolean DEBUG_FLAG = true;
};
这显然是有效的,因为行注释实际上注释出了
/*
,所以块注释不会被解析,对于
/
实际注释出
*/
的结尾也是一样的


我的问题是,是否有更好的方法通过评论来做类似的事情,或者这种方法是否像你通过评论所能做到的那样“圆滑”?

一种方法是这样的:

//*
<chunk #1, active code here>
//*/

/*
<chunk #2, commented out code here>
//*/
public class DebugOptions {
  public static final boolean DEBUG_FLAG = true;
};
然后在函数中,可以有如下代码:

if(DebugOptions.DEBUG_FLAG) {
  // Do some debugging stuff
} else {
  // Do something else
}
或者,每个类都可以有自己的标志,但模式是相同的。此外,您可能希望有多个标志或
enum
,以提供不同级别的调试服务


当您将布尔标志设置为false时,大多数编译器都会优化掉所有未执行的代码。

首先让我说,我认为使用斜杠和星号的神秘系统来切换代码是有害的,但还是让我们试试这个

选择的第一个块

//*
public static void doStuff()
{
    System.out.println("foo");
}
/*/
public static void doStuff()
{
    System.out.println("bar");
}
//*/
选择第二个块(唯一的更改是删除第一个斜杠):

它的工作原理是因为中间的<代码> /*/</代码>,它取决于是否存在已打开的注释块,取决于打开或关闭注释块。


这与您自己的方法类似,但优点是您可以通过只更改一个字符来切换,而不必更改两个字符。因此,这是一种更有效的作恶方式。

混乱,您的代码无法读取。使用IDE功能时,需要按两次热键。1或2秒,这不是一个经济体

更好的调试方法是使用包装器方法,该方法允许根据参数在同一时间运行其中一个方法

void debug(Mode m) {
  switch m : {
    case M1: method1();
    case M2: method2();
    ...
  }
}
在代码
debug(M1)
中调用它。
如果你真的关心速度,你只需要将1从2更改为1。

什么更流畅,然后是2次击键?@hackattack如果你在多个类中都有调试代码,这需要的不仅仅是2次击键。我不认为最后一点是真的,事实上我有理由确定这不是真的。使用
private static final
标志,它是。无论哪种方式,JIT编译器最终都会摆脱它。@biziclop感谢您的澄清。我在C++和java之间跳得太多了,所以当两种语言不同时,我会觉得其中一些细节被混淆了。是的,我可以想象这不容易。关键是,如果常量在另一个文件中,没有任何东西可以阻止某人更改其值并重新编译该文件。因此,编译器无法确定常量的值在运行时是否相同。@biziclop是的,这是有道理的。这是有道理的,但不幸的是,它不是这样工作的。
publicstaticfinal
常量实际上也内联在其他文件中。更改值,然后只重新编译包含常量的文件,将不会使用它更新文件中的值。很好,我可能会开始使用它!