如何用Java编写匿名函数?
2022-08-31 10:56:00
这有可能吗?
如果你指的是一个匿名函数,并且使用的是Java 8之前的Java版本,那么一句话,不。(如果你使用Java 8+,请阅读lambda表达式。)
但是,您可以使用如下函数实现接口:
Comparator<String> c = new Comparator<String>() {
int compare(String s, String s2) { ... }
};
你可以将它与内部类一起使用,以获得一个几乎匿名的函数:)
下面是一个匿名内部类的示例。
System.out.println(new Object() {
@Override public String toString() {
return "Hello world!";
}
}); // prints "Hello world!"
这并不是很有用,但它显示了如何创建匿名内部类及其方法的实例。extends Object
@Override
toString()
当您需要实现一个可能不是高度可重用的(因此不值得重构为其自己的命名类)时,匿名内部类非常方便。一个具有启发性的示例是使用自定义 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