-
犯罪嫌疑人X
类似于函数指针的功能的Java习惯用法是一个实现接口的匿名类,例如Collections.sort(list, new Comparator<MyClass>(){
public int compare(MyClass a, MyClass b)
{
// compare objects
}});更新:在Java 8之前的Java版本中,上述内容是必需的。现在我们有更好的替代方案,即lambdas:list.sort((a, b) -> a.isGreaterThan(b));和方法参考:list.sort(MyClass::isGreaterThan);
-
慕少森
您可以使用接口替换函数指针。假设你想要运行一个集合并对每个元素做一些事情。public interface IFunction {
public void execute(Object o);}这是我们可以传递给CollectionUtils2.doFunc(Collection c,IFunction f)的接口。public static void doFunc(Collection c, IFunction f) {
for (Object o : c) {
f.execute(o);
}}举个例子说我们有一个数字集合,你想为每个元素添加1。CollectionUtils2.doFunc(List numbers, new IFunction() {
public void execute(Object o) {
Integer anInt = (Integer) o;
anInt++;
}});
-
一只萌萌小番薯
你可以使用反射来做到这一点。将参数作为参数传递给对象和方法名称(作为字符串),然后调用该方法。例如:Object methodCaller(Object theObject, String methodName) {
return theObject.getClass().getMethod(methodName).invoke(theObject);
// Catch the exceptions}然后使用它,如:String theDescription = methodCaller(object1, "toString");Class theClass = methodCaller(object2, "getClass");当然,检查所有异常并添加所需的强制转换。