带有子类的Java条件编译

问题描述 投票:0回答:2

我很抱歉,是否已经在其他地方问过这个,但我找不到它。

[基本上,我想知道带有条件编译的Java类(为了删除类文件中代码片段的所有痕迹)将在其子类上工作。

例如,让我们以如下方式实现类A及其子类B

public class A {
    protected static final boolean ASSERTS = false;

    protected A() {
        if (ASSERTS) {
            System.out.println("A: ASSERTS enabled.");
        }
}

public class B extends A {
    protected B() {
        if (ASSERTS) {
            System.out.println("B: ASSERTS enabled.");
        }
}

很明显,不会打印任何内容。但是,它们的类文件是否将包含已编译的if-condition?

非常感谢!

java conditional-compilation
2个回答
0
投票

Java不支持c,c ++等宏您可以使用标志在运行时启用或禁用断言,但不能使用宏


0
投票

只需在IntelliJ中编译该类,然后反编译.class文件以查看其是否包含该语句。它没有。

我怀疑这取决于编译器,但是您可能会找到包括这些更改的编译器。我正在使用Corretto Java 11。

© www.soinside.com 2019 - 2024. All rights reserved.