Joh*_*nny 8 python java reflection
我正在将一些python代码转换为java,并且我需要调用一个对象的方法,但在运行时才知道哪些方法.在python中,我通过在我的对象上使用getattr并传递一个字符串来解决这个问题,该字符串是我的方法的名称.你会如何在Java中做类似的事情?
NPE*_*NPE 13
Class.getField是你的朋友.它可能不会非常简单,因为Python是动态类型的,而Java是静态类型的(除非您事先知道字段的类型.)
编辑:如何翻译这些例子. http://effbot.org/zone/python-getattr.htm
属性查找
蟒蛇
//normal
value = obj.attribute
//runtime
value = getattr(obj, "attribute")
Run Code Online (Sandbox Code Playgroud)
Java的
//normal
value = obj.attribute;
//runtime
value = obj.getClass().getField("attribute").get(obj);
Run Code Online (Sandbox Code Playgroud)
方法调用
蟒蛇
//normal
result = obj.method(args)
//runtime
func = getattr(obj, "method")
result = func(args)
Run Code Online (Sandbox Code Playgroud)
Java的
//normal
result = obj.method(args);
//runtime
Method func = obj.getClass().getMethod("method", Object[].class);
result = func.invoke(obj, args);
Run Code Online (Sandbox Code Playgroud)
在更简单的情况下,您需要知道您是否有字段或方法.因为它们可以具有相同的名称.此外,方法可能会重载,因此您需要知道所需的方法签名.
如果您不关心自己获得哪种方法或字段,则可以非常轻松地将其作为辅助方法实现.