AccessLevel.PACKAGE和AccessLevel.MODULE有什么区别?

Jad*_*ezo 8 java lombok

在龙目岛,实际的区别是什么

@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可能会有一些未来的工作,但现在似乎是相同的.

  • 这是有道理的,我没有想到JDK9.它可能正在进行中!如果没有其他人参与其他计划或路线图,我会接受你的答案.谢谢 (2认同)
  • @maaartinus是完全正确的。龙目岛开发人员期望与我们得到的模块系统不同。我认为应该不建议使用“ MODULE”值,并最终将其删除。披露:我是lombok开发人员。 (2认同)