我正在尝试在Jython中为Java对象编写一个对象检查器,我想确定给定Java方法所期望的参数数量。有没有办法在python中做到这一点,或者我必须使用Java反射。
为了解释,我想调用不带任何参数的Java对象的所有“get ...”方法:
from java.util import Date, ArrayList
def numberOfArguments(fct):
# Some magic happens here
return 0
def check(o):
print("")
print(type(o).name)
for fctName in dir(o):
if not str(fctName).startswith("get"): continue
print("== " + fctName)
fct = eval("o."+fctName)
if numberOfArguments(fct) == 0:
print(" " + str(fct()))
check(Date())
check(ArrayList())
答案 0 :(得分:0)
哦,好吧,事实证明我使用dir(obj)
做错了。使用o.getCalss().getMethods()
更容易。这样,我也不会被重载方法所困扰。
from java.util import Date, ArrayList
def numberOfArguments(fct):
# Not very magic:
return len(fct.getParameterTypes())
def check(o):
print("")
print(type(o).name)
# Use Java reflection instead of Python dir() function
for fct in o.getClass().getMethods():
fctName = fct.getName()
if not str(fctName).startswith("get"): continue
print("== " + fctName)
if numberOfArguments(fct) == 0:
print(" " + str(fct.invoke(o, [])))
check(Date())
check(ArrayList())