在 Lombok ,两者之间的实际区别是什么

@Getter(AccessLevel.PACKAGE)
private int country;


@Getter(AccessLevel.MODULE)
private int country;

最佳答案

这是一个好问题。我尝试为某些测试方法创建一些 setter ,然后得到的(反编译)为:

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

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

因此,乍看之下似乎没有什么区别。因此,我查看了源代码,我所能验证的是,暂时对它们进行了相同的处理(来自here源):


/**
 * 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进行一些工作,但目前看来还是一样。

关于java - AccessLevel.PACKAGE和AccessLevel.MODULE有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47339716/

10-10 15:55