是否可以通过某种方法将函数分配给 Java 中的变量,例如 PHP 或 JavaScript?
...或者当涉及到 Java 时,这个领域是否以不同的方式工作?
是否可以通过某种方法将函数分配给 Java 中的变量,例如 PHP 或 JavaScript?
...或者当涉及到 Java 时,这个领域是否以不同的方式工作?
在 Java 中,您Method
可以MethodHandles
通过反射调用方法,但该语言尚不支持该方法。
在 Java 8 中,您将能够使用对方法的引用。
在今天的 Java 中,不,你不能。
最接近的是接口:您不存储函数,而是定义所需函数的接口的实现。
一个典型的例子是Comparator 接口的实现:
Comparator<ProductSearchResult> c = new Comparator<ProductSearchResult>() {
public int compare(ProductSearchResult result1, ProductSearchResult result2) {
return result1.product.getRsId().compareTo(result2.product.getRsId());
}
};
Collections.sort(groupResults, c); // I pass a function, wrapped in my Comparator implementation
您拥有的最接近的是与接口相结合的内部类。这些不仅可以携带一个,而且可以携带许多功能(方法),如果愿意,可以将它们委托回主类方法。但是这个解决方案可能很容易过于重量级:
class Main {
interface X {
void doX();
}
class Ref1 implements X {
void doX() { doA(); };
}
class Ref2 implements X {
void doX() { doB(); };
}
void doA() { };
void doB() { };
void demo() {
X x = new Ref1();
x.doX();
}
}
这模拟了类似于 Lambdas 的东西......(如果您使用字符串以外的任何东西,您将需要更多的转换,但我保持示例简短)......
public class MyTest {
public static void main(String[] args) {
Lambda l = new Lambda() { public Object func(Object x)
{ return "Hello " + x; }
};
System.out.println(l.func("Bob"));
System.out.println(nowTryFromMethod(l));
System.out.println((new Lambda() { public Object func(Object x)
{ return "Goodbye " + x; }
}).func("Harry"));
}
private static Object nowTryFromMethod(Lambda l) {
return l.func("Jerry");
}
}
class Lambda {
public Object func(Object x) { return null; }
}
输出:
Hello Bob
Hello Jerry
Goodbye Harry
更新
Java 支持对1.8 版中称为Lambda的函数的引用