我们在java中有条件编译吗?

时间:2013-11-27 09:59:12

标签: java c++ compilation

我们是否在java中替换了这些语句?

#ifdef MacOSX
    #import <Cocoa/Cocoa.h>
#else
    #import <Foundation/Foundation.h>
#endif

我想根据条件编译我的java类?

2 个答案:

答案 0 :(得分:8)

不,Java没有这样的东西。虽然编译器可以删除保证不执行的代码,但它仍然是有效的代码。所以你可以:

private static final FOO_ENABLED = false;

...

if (FOO_ENABLED) {
    System.out.println("This won't be included in the bytecode");
}

......你不能拥有:

private static final FOO_ENABLED = false;

...

if (FOO_ENABLED) {
    This isn't even valid code. With a real preprocessor it wouldn't matter.
}

可以通过常规预处理器运行“不完全Java”代码,以便之后获得有效的Java,但在开发时会很痛苦。

最好将您感兴趣的功能抽象到接口/抽象类中,然后针对不同的平台进行不同的具体实现,在执行时选择正确的实现。

答案 1 :(得分:1)

没有。一般情况下,您需要使用公共超接口来实现Cocoa / Foundation所要提供的功能,然后为该接口提供两个不同的实现类,具体取决于您的平台正在瞄准。