1. 程式人生 > 其它 >c#上傳Ftp檔案,建立資料夾

c#上傳Ftp檔案,建立資料夾

一、方法引用的本質

  • 還是lambda表示式,本質上還是函式式介面的例項。

二、方法引用的使用

  • 1、使用情境:當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用

  • 2、方法引用使用的要求:要求介面中的抽象方法的形參列表和返回值型別與方法引用中的相同

  • 3、使用格式: 類(或物件):: 方法名

  • 4、具體分為如下的三種情況:

    物件::非靜態方法

    public void test1(){
            //Lambda表示式
            Consumer<String> con1 = str -> System.out.println(str);
            con1.accept("北京");
            System.out.println("************************");
            //方法引用
            PrintStream ps =  System.out;
            Consumer<String> con2 = ps::println;
            con2.accept("上海");
        }
    public void test2(){
            //Lambda表示式
            Employee emp = new Employee("1001","Tom",23,5600);
            Supplier<String> sup1 = () -> emp.getName();
            System.out.println(sup1.get());
            System.out.println("***********************");
            //方法引用
            Supplier<String> sup2 = emp::getName;
            System.out.println(sup2.get());
        }
    

    類::靜態方法

    public void test3(){
            //Lambda表示式
            Comparator<Integer> com1 = (t1, t2) -> Integer.compare(t1, t2);
            System.out.println(com1.compare(12, 21));
            System.out.println("***********************");
            //方法引用
            Comparator<Integer> com2 = Integer::compare;
            System.out.println(com2.compare(12, 21));
    
        }
    
    public void test4(){
            //Lambda表示式
            Function<Double,Long> func1 = d -> Math.round(d);
            System.out.println(func1.apply(12.6));
            System.out.println("******************");
            //方法引用
            Function<Double,Long> func2 = Math::round;
            System.out.println(func2.apply(12.6));
        }
    

    類::非靜態方法

    Comparator 中的int compare(T t1, T t2) 第一個引數當做方法引用類的物件

    String 中的int t1.compareTo(t2)

    public void test5(){
            //Lambda表示式
            Comparator<String> com1 = (s1, s2) -> s1.compareTo(s2);
            System.out.println(com1.compare("abc","abd"));
            System.out.println("*********************");
            //方法引用
            Comparator<String> com2 = String::compareTo;
            System.out.println(com2.compare("abc","abm"));
        }
    
    

三、拓展

  • 1、構造器引用

  • ​ 和方法引用類似,函式式介面的抽象方法的形參列表和構造器的引數列表一致。

  • ​ 抽象方法的返回值的型別即為構造器所屬的類的型別

    • Supplier中的 T get()
    • Employee中的空參構造器:Employee()
    public void test6(){
            //Lambda表示式
            Supplier<Employee> sup1 = () -> new Employee();
            System.out.println(sup1.get());
            System.out.println("********************");
            //方法引用
            Supplier<Employee> sup2 = Employee::new;
            System.out.println(sup2.get());
    
        }
    
    • Function中的R apply(T t)
    • Employee中的一個引數的構造器:Employee(int id)
    public void test7(){
            //Lambda表示式
            Function<String, Employee> func1 = (s) -> new Employee(s);
            System.out.println(func1.apply("2211"));
            System.out.println("********************");
            //方法引用
            Function<String, Employee> func2 = Employee::new;
            System.out.println(func2.apply("2211"));
        }
    
  • 2、陣列引用

    • Function 中的R apply(T t)

      ``` java
      public void test8(){
              //Lambda表示式
              Function<Integer, String[]> func1 = length -> new String[length];
              String[] arr1 = func1.apply(5);
              System.out.println(Arrays.toString(arr1));
              System.out.println("*****************");
              Function<Integer, String[]> func2 = String[]::new;
              String[] arr2 = func2.apply(10);
              System.out.println(Arrays.toString(arr2));
      
          }
      ```