如何解决类继承 + lombok + javac = 编译错误
在 Eclipse 中,以下设置都可以编译并运行得很好。
但是,在代码上使用 javac 时,编译 LombokInheritanceProblem_BaseClass
会导致编译器错误。
我的文件:
package stackoverflow.lombok.inheritanceproblem;
import lombok.experimental.UtilityClass;
@UtilityClass
public class AOPString {
static public String toLower(final String pString) {
return pString == null ? null : pString.toLowerCase();
}
}
和
package stackoverflow.lombok.inheritanceproblem;
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({ AOPString.class })
public class LombokInheritanceProblem_BaseClass {
public static void main(final String[] args) {
final LombokInheritanceProblem_BaseClass o = new LombokInheritanceProblem_BaseClass();
o.method1_normal();
o.method2_overridden();
o.method3_final();
System.out.println("Done.");
}
public LombokInheritanceProblem_BaseClass() {
System.out.println("LombokInheritanceProblem_BaseClass.LombokInheritanceProblem_BaseClass()".toLower());
}
public void method1_normal() {
System.out.println("LombokInheritanceProblem_BaseClass.method1_normal()".toLower());
}
public void method2_overridden() {
System.out.println("LombokInheritanceProblem_BaseClass.method2_normal()".toLower());
}
public final void method3_final() {
System.out.println("LombokInheritanceProblem_BaseClass.method3_final()".toLower());
}
}
和
package stackoverflow.lombok.inheritanceproblem;
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({ AOPString.class })
public class LombokInheritanceProblem_ChildClass extends LombokInheritanceProblem_BaseClass {
public static void main(final String[] args) {
final LombokInheritanceProblem_ChildClass o = new LombokInheritanceProblem_ChildClass();
o.method1_normal();
o.method2_overridden();
o.method3_final();
System.out.println("Done.");
}
public LombokInheritanceProblem_ChildClass() {
System.out.println("LombokInheritanceProblem_ChildClass.LombokInheritanceProblem_ChildClass()".toLower());
}
@Override public void method2_overridden() {
System.out.println("LombokInheritanceProblem_ChildClass.method2_overridden()".toLower());
}
}
正如我已经说过的,这两个文件的 Eclipse 编译都没有问题。
通过调用 LombokInheritanceProblem_BaseClass
编译类 "C:\Program Files\Java\jdk1.8.0_181\bin\javac.exe" D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_BaseClass.java -encoding utf8 -cp D:\lombok.jar -sourcepath D:\workspace\Test\src -d D:\apps-jc\libs_test\JcLib__AOP_Lombok_Test\jar-contents
也会编译并生成可运行的代码(我稍后将这些代码封装在一个运行良好的可执行 jar 中。
D:\apps-jc\libs_test\JcLib__AOP_Lombok_Test\jar-contents
在两次编译之间被清空。
当我尝试使用命令 LombokInheritanceProblem_ChildClass
编译 "C:\Program Files\Java\jdk1.8.0_181\bin\javac.exe" D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_ChildClass.java -encoding utf8 -cp D:\lombok.jar -sourcepath D:\workspace\Test\src -d D:\apps-jc\libs_test\JcLib__AOP_Lombok_Test\jar-contents
的代码时,我得到了一个有趣的异常:
D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_BaseClass.java:17: error: cannot find symbol
System.out.println("LombokInheritanceProblem_BaseClass.LombokInheritanceProblem_BaseClass()".toLower());
^
symbol: method toLower()
location: class String
D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_BaseClass.java:21: error: cannot find symbol
System.out.println("LombokInheritanceProblem_BaseClass.method1_normal()".toLower());
^
symbol: method toLower()
location: class String
D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_BaseClass.java:24: error: cannot find symbol
System.out.println("LombokInheritanceProblem_BaseClass.method2_normal()".toLower());
^
symbol: method toLower()
location: class String
D:\workspace\Test\src\stackoverflow\lombok\inheritanceproblem\LombokInheritanceProblem_BaseClass.java:27: error: cannot find symbol
System.out.println("LombokInheritanceProblem_BaseClass.method3_final()".toLower());
^
symbol: method toLower()
location: class String
4 errors
最奇怪的是,这些问题是在文件 LombokInheritanceProblem_BaseClass
中提出的。
编译LombokInheritanceProblem_BaseClass
作为目标时,没有出现这些问题。
那我做错了什么?
- 我是否需要向类路径添加其他内容?
- 是 javac 编译命令的项目顺序/顺序造成问题吗?
- 我的 .java 文件中是否缺少一些注释?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。