我有一个类,其中类C和类D上的@UtilityClass
注释在eclipse IDE中出现错误,但与IntelliJ 配合使用效果良好
@UtilityClass自动使类成为静态的,但是类不能成为静态的。
无法在类C和类D上使用@UtilityClass注释。已安装Lombok v1.18.20 "Envious Ferret"
。
@UtilityClass
public class A {
@UtilityClass
public class B {
public final String name = "name";
public final String id = "id";
@UtilityClass
public class C {
public final String OVER = "over.draft";
public final String ADD = "add.draft";
}
@UtilityClass
public class D {
public final String OVER = "over.published";
public final String ADD = "add.published";
}
}
}
如果它不在eclipse中工作,而在Intellij中工作,则看起来像是一个bug。
@UtilityClass
的文档指出,如果我们使用此注释,类中的所有方法、内部类和字段都将标记为static
。据此,类B
应该变成static
。
现在看看抛出问题中提到的错误的代码(lombok.javac.JavacNode
(,代码注释说:
// It might be an inner class. This is okay, but only if it is / can be a
// static inner class. Thus, all of its parents have to be static inner classes
// until the top-level.
因此,如果在类C
上使用@UtilityClass
注释,那么类B
应该是static
才能工作。
由于类A
是用@UtilityClass
注释的,所以类B
本应变成static
,但可能是,在上述验证过程中,它没有被识别为static
。
要解决此问题,需要手动将static
添加到类B
中。(可能还需要项目构建(。
(您也可以在lombok github页面中记录一个错误(
确保您的JDK版本不高于版本8(1.8(,因为lombok中似乎有一个错误,即@UtilityClass在JDK 9或更高版本时不会使内部类静态
https://kotlinlang.org/docs/whatsnew1720.html#support-for-kotlin-k2-编译器-插件