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

What is the difference between AccessLevel.PACKAGE and AccessLevel.MODULE?

在 Lombok 中,

之间的实际区别是什么?
@Getter(AccessLevel.PACKAGE)
private int country;

@Getter(AccessLevel.MODULE)
private int country;

?

一个好问题。我尝试为某些测试方法创建一些设置器,但我得到的只是(反编译):

for Module AccessLevel:
void setTestModule(Integer testModule) {
    this.testModule = testModule;
}

for Package AccessLevel:
void setTestPackage(Integer testPackage) {
    this.testPackage = testPackage;
}

因此,乍一看似乎没有区别。所以,我查看了源代码,我所能验证的是,目前它们的处理方式相同(来自源代码here):

lombok.javac.handlers.JavacHandlerUtil.toJavacModifier(AccessLevel accessLevel) or 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;
    }
}

我认为 java 9 可能会有一些未来的工作,但现在看起来是一样的。