Java闭包简介

问题描述

| 谁能描述这种代码来理解Java闭包。
public static <T> void sort(List<T> l,final {T,T=>Number} block) {

    Collections.sort(l,new Comparator<T>() {
        public int compare(T arg0,T arg1) {
            return block.invoke(arg0,arg1);
        }
    }
}
    

解决方法

重要说明:问题是关于较早的提案。这不是选择的语法。请参阅此Q / A作为“历史参考”。 Gilad Bracha,Neal Gafter,James Gosling和Peter von derAhé在BGGA建议中描述了此语法。 此代码段可以描述如下: 它以第二个参数为参数ѭ1return并返回
Number
的函数(并将其分配给参数ѭ3to)。 然后从中创建一个“ 4”。这是通过将to5ѭ方法委派给ѭ3call调用来实现的。 将此比较器传递给“ 7”方法。 语法分解如下:
public static <T> void sort(List<T> l,final {T,T=>Number} block) {
                                             ^^^^^^^^^^^^^^^^^^^^
一个名为ѭ3of的参数,其类型为\“ function,它取两个
T
并返回
Number
\”。
    Collections.sort(l,new Comparator<T>() {
        public int compare(T arg0,T arg1) {
            ...
        }
    }
}
Comparator
匿名子类的实例作为第二个参数对to7ѭ的普通调用...
        ...
            return block.invoke(arg0,arg1);
        ...
...返回由
block
参数定义的函数计算的数字。 用经典Java来说,您的代码段将对应于
interface Block<T> {
    public int invoke(T arg1,T arg2);
}


class Test {
    public static <T> void sort(List<T> l,final Block<T> block) {
        Collections.sort(l,new Comparator<T>() {
            public int compare(T arg0,T arg1) {
                return block.invoke(arg0,arg1);
            }
        });
    }
}
    ,正如@axtavt指出的那样,(不幸的)Java 7不会关闭。但是,Groovy确实可以在JVM上运行,并且可以与其他Java代码很好地集成。我将阅读此书以获取更多信息。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...