如何用Java编写匿名函数?

2022-08-31 10:56:00

这有可能吗?


答案 1

如果你指的是一个匿名函数,并且使用的是Java 8之前的Java版本,那么一句话,不。(如果你使用Java 8+,请阅读lambda表达式。)

但是,您可以使用如下函数实现接口:

Comparator<String> c = new Comparator<String>() {
    int compare(String s, String s2) { ... }
};

你可以将它与内部类一起使用,以获得一个几乎匿名的函数:)


答案 2

下面是一个匿名内部类的示例。

System.out.println(new Object() {
    @Override public String toString() {
        return "Hello world!";
    }
}); // prints "Hello world!"

这并不是很有用,但它显示了如何创建匿名内部类及其方法的实例。extends Object@OverridetoString()

另请参见


当您需要实现一个可能不是高度可重用的(因此不值得重构为其自己的命名类)时,匿名内部类非常方便。一个具有启发性的示例是使用自定义 java.util.Comparator<T> 进行排序。interface

下面是如何根据 对 进行排序的示例。String[]String.length()

import java.util.*;
//...

String[] arr = { "xxx", "cd", "ab", "z" };
Arrays.sort(arr, new Comparator<String>() {
    @Override public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }           
});
System.out.println(Arrays.toString(arr));
// prints "[z, cd, ab, xxx]"

请注意此处使用的逐减比较技巧。应该说,这种技术在一般情况下是被打破的:它只适用于你可以保证它不会溢出的情况(长度就是这种情况)。String

另请参见