如何确定嵌套类在Groovy AST转换中是否是静态的?

fkvaft9z  于 2022-10-07  发布在  其他
关注(0)|答案(1)|浏览(132)

在AST转换中,我尝试检测类Foo是否有嵌套类,如果有,它们是静态类还是内部类:

@MyTransform
class Foo {
  static class A {}
  class B {}
}

当我检查fooCn.innerClasses时,Foo$AFoo$B都列出了。ClassNode包括一个名为isStaticClass的方法,但由Javadoc,它只告诉我嵌套类是否在静态方法中声明*(作为本地类),而不是JLS定义的“静态类”。a.staticClassb.staticClass都返回falseab都为outerClass返回Foo

如何检查Foo$AFoo$B的类节点并确定Foo$A是静态嵌套类?

des4xlb0

des4xlb01#

表示每个类的ClassNode具有包含类的修饰符标志的属性modifiers;位4(值8)被定义为STATIC修饰符。实用程序方法java.lang.reflect.Modifier.isStatic(classNode.modifiers)将指示类是静态的、嵌套的还是内部的。

相关问题