Referencia de método de funciones relacionadas con JDK8.0 (2)

Cinco, referencia al método

  • Referencia de método: es otra manifestación de la expresión Lambda.

  • Escenario de uso: cuando la lista de parámetros y el tipo de valor de retorno del método de llamada en el cuerpo de Lambda son coherentes con la lista de parámetros y el valor de retorno del método abstracto en la interfaz funcional

  • Formularios de citas de métodos comunes:

    • Referencia de método de instancia: (args) -> expr.method (args);

      • Formato: expr :: método

        Consumer<String> c= (s)-> System.out.println(s);
        c.accept("Lambda表达式的基础形式....");
        
        Consumer<String> c2=System.out::println;
        c2.accept("Lambda表达式的方法引用形式..");
        
    • Referencia de método estático: (args) -> ClassName.method (args);

      • Formato: ClassName :: método

        Comparator<Integer> c3= (x,y)->Integer.compare(x,y); //基础形式
        
        Comparator<Integer> c4=Integer::compare; //方法引用形式
        int r=c4.compare(5,7);
        System.out.println("5和7的大写比较结果为:"+r);
        
    • Referencia de método de caso especial: (A a, B b) -> A.method (b);

      • Formato: A :: método

      • Nota: Si el primer parámetro de la lista de parámetros de Lambda es el llamador del método de instancia y el segundo parámetro es el parámetro del método de instancia, aquí se puede aplicar el método de referencia (tenga en cuenta que los tipos de valor de retorno de los dos métodos son lo mismo)

        BiPredicate<String,String> bp = (s1,s2)->s1.equals(s2);
        
        BiPredicate<String,String> bp2=String::equals;
        boolean b=bp2.test("hello","world");
        System.out.println("两个字符串的比较结果:"+b);
        
    • Referencia del método de construcción:

      • Referencia al método de construcción sin parámetros: () -> new Student ();

        • Formato: Estudiante :: nuevo
      • Referencia al método de construcción parametrizado: (String s) -> new Student (s);

        • Formato: Estudiante :: nuevo
      • Nota: La lista de parámetros del constructor que se debe llamar debe ser coherente con la lista de parámetros del método abstracto en la interfaz funcional, y el tipo de valor de retorno del método abstracto es el tipo de objeto.

        class MyClass{
                  
                  
            public MyClass(){
                  
                  
                System.out.println("无参数的构造方法...");
            }
            public MyClass(Integer value){
                  
                  
                System.out.println("有参数的构造方法....");
            }
        }
        public class TestMyClass {
                  
                  
            public static void main(String[] args) {
                  
                  
                Supplier<MyClass> s3 = MyClass::new;
                MyClass mc1=s3.get();
        
                Function<Integer,MyClass> s4 = MyClass::new;
                MyClass mc2=s4.apply(25);
        
            }
        }
        

Supongo que te gusta

Origin blog.csdn.net/Java_lover_zpark/article/details/90042047
Recomendado
Clasificación