遇到这样一个基础需求:
- 需要提取Java中的所有方法
- 需要过滤所有访问权限为public的方法。
- 语言:python
- 库:javalang
直接使用pip install 安装即可。
直接提供解决方案,中间夹杂了很多测试过程,这里不进行记录。
使用parse模块直接读取,会读取到一个方法,这个方法中的types会存有所有类信息的列表。
tree = javalang.parse.parse(f.read())
如果是直解析一个类则可以直接选择types[0]
classs=tree.types[0]
获取到的classs同样包含了两类内容,一个是属性,还有一个是方法,每一个都对应了一个具体内容。我们使用classs.body进行获取
for i in classs.body:
这里我只想要读取到method,而不想要属性,选择取巧的方式,属性不具备body属性,所以可以先进行i.body,再进行异常抛出即可。
在method类中modifiers表示前缀,则可以直接使用in的方式挑出public属性的方法:
for i in classs.body: try: if "public" in i.modifiers: i.body print(i.name) except Exception as e: pass
最终解决方案如下:
import javalang
with open("cs.java","r",encoding='utf-8') as f:
tree = javalang.parse.parse(f.read())
classs=tree.types[0]
for i in classs.body:
try:
if "public" in i.modifiers:
i.body
print(i.name)
except Exception as e:
pass
效果如下:



