JDK8 - 方法引用
方法方法引用的使用要求:要求接口中的抽象方法的形参列表和返回值类型与 方法引用中的方法的形参列表和返回值类型相同(针对情况1,情况2)
情况1 对象::非静态方法
情况2 类::静态方法
情况3 类::非静态方法
情况1:
public class MethodReferenceTest { public static void main(String[] args) { //lambda表达式 Consumer<String> con1 = str -> System.out.println(str); con1.accept("hello"); System.out.println("*****************************"); //改写方法引用 PrintStream out = System.out; Consumer<String> con2 = out::println; con2.accept("hello"); } }
情况2:
public class MethodReferenceTest2 { public static void main(String[] args) { //lambda Function<Double, Long> func1 = num -> Math.round(num); System.out.println(func1.apply(2.11)); //方法引用 Function<Double, Long> func2 = Math::round; System.out.println(func2.apply(2.11)); } }
情况3例子1:
/** * * Comparator中的int compare(T t1, T t2) * String中的 int t1.compare(t2) */ public class MethodReferenceTest3 { public static void main(String[] args) { // lambda Comparator<String> c = (s1, s2) -> s1.compareTo(s2); System.out.println(c.compare("abc","abm")); System.out.println("*****************************"); // 方法引用 Comparator<String> c2 = String::compareTo; System.out.println(c2.compare("abc","abm")); } }
情况3例子2:
public class MethodReferenceTest3 { public static void main(String[] args) { // lambda Person person = new Person("master shi"); Function<Person, String> func1 = p -> p.getName(); System.out.println(func1.apply(person)); // 方法引用 Function<Person, String> func2 = Person::getName; System.out.println(func2.apply(person)); } }