如何标记java代码,使其不被编译
我想知道是否有类似于C的Java等价物
#if 0 ... Some Code ... #endif
哪个可用于我们不想编译的代码块。 添加块引号:
/* ... Some Code ... */
也有同样的效果,但问题是,我们必须确保没有单行注释
// some comment
在街区。
Java中没有预处理器指令。 您最好的选择是评论代码。
static final
字段可用于条件编译。
static final boolean DEBUG = false; if (DEBUG) { some code .... }
some code
将被编译器删除。
也可以使用assert
关键字来启用和禁用代码的某些部分。 使用java -ea: ..
来控制是否应该启用或禁用代码。 请参见http://docs.oracle.com/javase/1.5.0/docs/guide/language/assert.html
有几种解决方案:
-
使用预处理器 – 我认为它将与标准CPP一起使用。 有些Java特定的处理器可以作为jappo和java +使用
-
如果以下情况,将#if 0替换为true:
if(false){code}
可以通过查询系统属性来改进条件:
if(System.getProperty("NO_COMPILE").equals("true")) { code }
这样做的优点是可以从ANT或Eclipse轻松设置。
编辑 :请注意,如果代码将实际编译并出现在.class文件中。 此外,虽然查询系统属性更优雅,但是在运行时而不是在编译时完成,因此不完全符合原始要求。 if(false)在2号上更好。
EDIT2 :我刚刚找到的更好的解决方案: http : //prebop.sourceforge.net/
我甚至无法想象为什么这是一个问题(如上所述),但我怀疑最简单的事情是在编译之前在代码中使用grep(或将其提交到版本控制库)。 我不认为eclipse中有任何东西(如果这就是你正在使用的东西)来帮助你,我几乎肯定java没有像你在C中描述的机制那样的内置机制。
我刚才在某个地方看到过这个:
// /* class SomeClass{ int withSomeField; .............. } // */
你可以把//
放进去,然后根据需要删除它们。 这可能是多线评论,如果他们在那里会导致问题。
if(false)对我有用(使用Eclipse)。
您可以使用Java预处理器,我想它会比标志更好.http ://code.google.com/p/java-comment-preprocessor/ flags当然允许在编译阶段剪切和添加块但是预处理器允许使该过程更加灵活
在C / C ++语言中使用的预处理程序指令没有Java等价物。 无论如何,你可以使用注释或ANT做类似的事情,如下所述
使用注释添加C类似预处理程序指令
或者在这里
如何用Java进行条件编译
不要试图通过预处理源代码来使代码成为条件(如C所做的那样),而是使用面向对象的编程:使用诸如策略和dependency injection之类的设计模式来使代码成为条件。