在java中从类对象运行任意函数

在java中从类对象运行任意函数,java,function,reflection,closures,Java,Function,Reflection,Closures,我想知道我们是否可以用java做类似的事情。 假设我有一个有一些成员的班级: Class Test { // some constructors and members public Object func; } 然后我从其他类中定义了一些函数。我想在运行时将这些函数分配给我的测试类,以便根据情况,eval(Test.func)可以是任何函数。你会怎么做? 不过,在javascript中,作为字符串传递函数是相当容易的 反思或结束是否与我想要实现的目标相关? 谢谢来自 在java中,

我想知道我们是否可以用java做类似的事情。 假设我有一个有一些成员的班级:

Class Test {
  // some constructors and members
  public Object func;
} 
然后我从其他类中定义了一些函数。我想在运行时将这些函数分配给我的测试类,以便根据情况,eval(Test.func)可以是任何函数。你会怎么做? 不过,在javascript中,作为字符串传递函数是相当容易的

反思或结束是否与我想要实现的目标相关? 谢谢

来自

在java中,它可以通过反射api完成

看一看

一个完整的示例(带参数的非静态方法)是:

import java.lang.reflect.*;

public class Test {

    public String methodName(int i) {
        return "Hello World: " + i;
    }

    public static void main(String... args) throws Exception {
        Test t = new Test();
        Method m = Test.class.getMethod("methodName", int.class);
        String returnVal = (String) m.invoke(t, 5);
        System.out.println(returnVal);
    }
}
哪些产出:

你好世界:5

在java中,它可以通过反射api完成

看一看

一个完整的示例(带参数的非静态方法)是:

import java.lang.reflect.*;

public class Test {

    public String methodName(int i) {
        return "Hello World: " + i;
    }

    public static void main(String... args) throws Exception {
        Test t = new Test();
        Method m = Test.class.getMethod("methodName", int.class);
        String returnVal = (String) m.invoke(t, 5);
        System.out.println(returnVal);
    }
}
哪些产出:

你好世界:5


您可以使用
reflection
按名称调用方法,例如

Method myMethod = getClass().getMethod("methodName",MyClass.class);
myMethod.invoke(classObj);

如果你想用诸如<代码> EVA>代码>来执行动态代码,请考虑或

< p>可以使用<代码>反射>代码>按名称调用该方法,例如

Method myMethod = getClass().getMethod("methodName",MyClass.class);
myMethod.invoke(classObj);

如果你想用“代码> EVA/<代码>来执行动态代码,请考虑或

< p>答案是<强>是/强>,你可以这样做,但是你应该这样做吗?这种模式对于具有一流函数的语言非常有效,但java是最好的模式,不同的模式适用

当我必须用Java进行函数式编程时,我会用它来帮助。我可以使用反射并坚持使用纯Java,但我喜欢Guava提供的抽象。Guava定义了一个基本上是对函数的引用(具有通用输入类型和输出类型)


答案是是,你可以这样做,但你应该这样做吗?这种模式对于具有一流函数的语言非常有效,但java是最好的模式,不同的模式适用

当我必须用Java进行函数式编程时,我会用它来帮助。我可以使用反射并坚持使用纯Java,但我喜欢Guava提供的抽象。Guava定义了一个基本上是对函数的引用(具有通用输入类型和输出类型)


如果你解释你真正想做什么,我们可能会告诉你更好的选择。如果你解释你真正想做什么,我们可能会告诉你更好的选择。谢谢你提到番石榴!我现在不需要它,但这可能是我将来的事情。谢谢你提到番石榴!我现在不需要它,但这可能是我将来的事情。是的,像eval这样的东西可能很方便,但现在不是必须的,因为我的函数是在编译时正确定义的。感谢您提到Groovy,我稍后会看一看:)是的,像eval这样的东西可能很方便,但现在不是必须的,因为我的函数是在编译时正确定义的。谢谢你提到Groovy,稍后我会看一看:)非常感谢。虽然我需要其他类的函数,但我想你的方法也可以用它?让我先试试,干杯!非常感谢你。虽然我需要其他类的函数,但我想你的方法也可以用它?让我先试试,干杯!