2

我想做的是用字符串变量调用方法/对象。

我有 ' foo' 和 ' bar' 需要做foo.bar()

有没有类似 PHP 的东西call_user_func()?还有其他建议吗?

4

4 回答 4

1

它在 Java 中称为反射:有关详细信息,请参阅本教程

     foo fooObject = new foo(); //not using reflection, but you can if you need to

     //use reflection on your class()not object to get the method
     Method method = foo.class.getMethod("bar", null);

     //Invoke the method on your object(not class)
     Object bar = method.invoke(fooObject, null);

UpperCase附带说明:您的班级名称应以eg开头Foo

于 2012-11-13T14:20:18.570 回答
1

在java中你应该使用反射。

官方文档:http ://docs.oracle.com/javase/tutorial/reflect/index.html

您的情况可能如下所示:

Class<?> c = Class.forName("foo");
Method  method = c.getDeclaredMethod ("bar", new Class [0] );
method.invoke (objectToInvokeOn, new Object[0]);

objectToInvokeOn您要调用的实例/对象(类 foo)在哪里。如果你有它。

否则你应该去:

Class<?> c = Class.forName("foo");
Object objectToInvokeOn = c.newInstance();
Method  method = c.getDeclaredMethod ("bar", new Class [0] );
method.invoke (objectToInvokeOn, new Object[0]);
于 2012-11-13T14:18:31.833 回答
0

理论上没有完全等效的函数,因为 Java 是纯 OOP,因此它不提供全局范围的函数调用者 - 顺便说一下,这是复制反射本身的糟糕意图,因为 PHP 函数当时不是正确的对象.

如前所述,您可以使用Java 的反射,其行为类似于PHP 的.

TL;博士

call_user_func*您可以使用 Java 反射类 [Class, Method, Field]来模拟东西。

于 2012-11-13T14:36:03.927 回答
0

如果您有该类实现的接口,那么您可以创建一个具有通用方法处理的代理类。但这比反思更具体。

于 2012-11-13T14:44:59.147 回答