0

我正在尝试在 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())
4

1 回答 1

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())
于 2013-05-27T13:41:25.997 回答