Jython的:确定的参数个数Java方法需要在运行时 [英] Jython: Determine the number of arguments a Java method takes at runtime
问题描述
我试图写在Jython中的Java对象的对象督察,我要确定一个给定的Java方法多少个参数的期望。有没有办法做到这一点在Python中,还是必须要使用Java反射了点。
要解释一下,我想打电话给所有的得......不带任何参数的Java对象的方法:
java.util中进口日期,ArrayList的高清numberOfArguments(FCT):
#一些魔术发生在这里
返回0高清检查(O):
打印()
打印(类型(O)。名称)
对于fctName的dir(O):
如果不是STR(fctName).startswith(获取):继续
打印(==+ fctName)
FCT =的eval(O+ fctName)
如果numberOfArguments(FCT)== 0:
打印(+ STR(FCT()))检查(DATE())
检查(ArrayList的())
哦,原来我用做错事 DIR(OBJ)
。这只是方式更容易使用 o.getCalss()的getMethods()
。这样一来,我也不要被重载方法咬伤。
java.util中进口日期,ArrayList的高清numberOfArguments(FCT):
#不是很神奇:
返回LEN(fct.getParameterTypes())高清检查(O):
打印()
打印(类型(O)。名称)
#使用Java反射,而不是Python的DIR()函数
在o.getClass()FCT的getMethods():
fctName = fct.getName()
如果不是STR(fctName).startswith(获取):继续
打印(==+ fctName)
如果numberOfArguments(FCT)== 0:
打印(+ STR(fct.invoke(O,[])))检查(DATE())
检查(ArrayList的())
I'm trying to write an object inspector for Java objects in Jython, and I want to determine how many arguments a given Java method expects. Is there any way to do that in python, or do I have to use Java reflection for that.
To explain, I'd like to call all "get..." methods of a Java object that don't take any arguments:
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())
Oh well, turns out I was doing the wrong thing by using dir(obj)
. It's just way easier to use o.getCalss().getMethods()
. This way, I also don't get bitten by overloading methods.
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())
这篇关于Jython的:确定的参数个数Java方法需要在运行时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!