我很抱歉,是否已经在其他地方问过这个,但我找不到它。
[基本上,我想知道带有条件编译的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不支持c,c ++等宏您可以使用标志在运行时启用或禁用断言,但不能使用宏
只需在IntelliJ中编译该类,然后反编译.class
文件以查看其是否包含该语句。它没有。
我怀疑这取决于编译器,但是您可能会找到将包括这些更改的编译器。我正在使用Corretto Java 11。