Java相当于python的getattr?

时间:2010-12-09 12:56:09

标签: java python reflection

我正在将一些python代码转换为java,并且我需要调用一个对象的方法,但在运行时才知道哪些方法。在python中,我通过在我的对象上使用getattr并传递一个字符串来解决这个问题,该字符串是我的方法的名称。你会如何在Java中做类似的事情?

6 个答案:

答案 0 :(得分:12)

Class.getField是你的朋友。它可能不会非常简单,因为Python是动态类型的,而Java是静态类型的(除非事先知道字段的类型。)

编辑:如何翻译这些例子。 http://effbot.org/zone/python-getattr.htm

属性查找

的Python

//normal
value = obj.attribute

//runtime
value = getattr(obj, "attribute")

爪哇

//normal
value = obj.attribute;

//runtime
value = obj.getClass().getField("attribute").get(obj);


方法调用

的Python

//normal
result = obj.method(args)

//runtime 
func = getattr(obj, "method")
result = func(args)

爪哇

//normal
result = obj.method(args);

//runtime
Method func = obj.getClass().getMethod("method", Object[].class);
result = func.invoke(obj, args);

在更简单的情况下,您需要知道您是否有字段或方法。因为它们可以具有相同的名称。此外,方法可能会重载,因此您需要知道所需的方法签名。

如果你不关心你得到哪种方法或字段,你可以很容易地将它作为辅助方法实现。

答案 1 :(得分:0)

您可以启动here以了解Java反射。

答案 2 :(得分:0)

您可以使用java reflection,但没有完全相同的getattr

答案 3 :(得分:0)

在Java中,你使用Reflection API(这通常很麻烦)。

Apache Commons BeanUtils项目中的

MethodUtils可能会让它更容易使用,尽管对于像这样简单的东西来说这是一个非常大的依赖。

答案 4 :(得分:0)

您应该使用Reflection API。由于纯API有点......不可接近,因此您应该查看commons beanutilsreflections等帮助程序。

答案 5 :(得分:0)

处理此问题的最简单方法是在Java类中创建一个Map对象,并继续添加名称值对并相应地对其进行检索,尽管它可能不支持setAttr支持的不同类型。