在龙目岛,实际的区别是什么
@Getter(AccessLevel.PACKAGE)
private int country;
Run Code Online (Sandbox Code Playgroud)
和
@Getter(AccessLevel.MODULE)
private int country;
Run Code Online (Sandbox Code Playgroud)
?
ial*_*lex 11
这是一个很好的问题.我尝试为一些测试方法创建一些setter,我得到的只是(反编译):
for Module AccessLevel:
void setTestModule(Integer testModule) {
this.testModule = testModule;
}
for Package AccessLevel:
void setTestPackage(Integer testPackage) {
this.testPackage = testPackage;
}
Run Code Online (Sandbox Code Playgroud)
所以,首先看来似乎没有区别.所以,我查看了源代码,我可以验证的是,目前它们的处理方式相同(来自此处的源代码):
lombok.javac.handlers.JavacHandlerUtil.toJavacModifier(AccessLevel accessLevel)或lombok.eclipse.handlers.EclipseHandlerUtil.toEclipseModifier(AccessLevel accessLevel)
/**
* Turns an {@code AccessLevel} instance into the flag bit used by javac.
*/
public static int toJavacModifier(AccessLevel accessLevel) {
switch (accessLevel) {
case MODULE:
case PACKAGE:
return 0;
default:
case PUBLIC:
return Flags.PUBLIC;
case NONE:
case PRIVATE:
return Flags.PRIVATE;
case PROTECTED:
return Flags.PROTECTED;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为Java 9可能会有一些未来的工作,但现在似乎是相同的.