Jython的:确定的参数个数Java方法需要在运行时 [英] Jython: Determine the number of arguments a Java method takes at runtime

查看:267
本文介绍了Jython的:确定的参数个数Java方法需要在运行时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图写在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆