方法引用在Java8中引入,类似于lambda表达式。它允许我们引用方法或构造函数而不执行它们。方法引用和lambda表达式需要由兼容函数接口组成的目标类型。我们还可以在java中使用泛型类和泛型方法的方法引用。
interface MyFunc<T> { int func(T[] vals, T v); } class MyArrayOps { static<T> int countMatching(T[] vals, T v) { int count = 0; for(int i=0; i < vals.length; i++) if(vals[i] == v) count++; return count; } } public class GenericMethodRefTest { static<T> int myOp(MyFunc f, T[] vals, T v) { return f.func(v als, v); } public static void main(String args[]) { Integer[] vals = { 1, 2, 3, 4, 2, 3, 4, 4, 5 }; String[] strs = { "One", "Two", "Three", "Two" }; int count; count = myOp(MyArrayOps :: countMatching, vals, 4); System.out.println("vals 包含" + count + " 4s"); count = myOp(MyArrayOps :: countMatching, strs, "Two"); System.out.println("strs 包含" + count + " Twos"); } }
输出结果
vals 包含3 4s strs 包含2 Twos