java1.8新特性(三 關於 ::的用法)


java1.8 推出了一種::的語法 用法 身邊 基本沒人用1.8的新API 目前 我也是只處於學習 運用 階段 有點 知其然不知其所以然 通過后面的學習,及時查漏補缺

 

一個類中 有 靜態方法 ,非靜態方法,構造方法

  1. :: 操作靜態方法
    package lambda;
    
    /**
     * @author 作者:cb
     * @version 創建時間:2019年1月3日 下午4:07:01
     * 
     */
    
    public class User {
        static void getName(String s) {
            System.out.println("該用戶的名字:" + s);
        }
    }
        public static void main(String[] args) {
            Consumer<String> consumer = User::getName;
            consumer.accept("consumer");
            
        }

     User::getName 其中 getName 是 一個static 方法 所以 可以 直接使用:: ::表示方法 推導  User::getName  必須要有一個 function的返回值,該返回值 可以 是自己定義  也可以使用java1.8 的 帶的接口 如果是自己定義接口 則可以這樣:


    package lambda;

    /**
    * @author 作者:cb
    * @version 創建時間:2019年1月3日 下午4:11:30
    *
    */
    @FunctionalInterface
    public interface UserInterfce<F> {

    void convert(F form);

    }


    這里 既然 既然 已經幫我們提供了接口  沒有必要的話 直接 用 就可以了。。當然 也可以 自己 定義一個 funcationinterface 的接口

     

  2. ::操作 構造方法

    package lambda;
    
    /**
     * @author 作者:cb
     * @version 創建時間:2019年1月3日 下午4:07:01
     * 
     */
    
    public class User {
        static void getName(String s) {
            System.out.println("該用戶的名字:" + s);
        }
    
        public User() {
            System.out.println("無參構造器");
        }
    
        public User(String str) {
            System.out.println("有參" + str);
        }
    
    }
    package lambda;
    
    import java.util.function.Consumer;
    import java.util.function.Supplier;
    
    import com.google.common.base.Function;
    
    /**
     * @author 作者:cb
     * @version 創建時間:2019年1月3日 下午4:09:43
     * 
     */
    public class SomethingTest {
        public static void main(String[] args) {
            Consumer<String> consumer = User::getName;
            consumer.accept("consumer");
    
            UserInterfce<String> userInterfce = User::getName;
            userInterfce.convert("自定義fancation");
            Function<String, User> function = User::new;
            User apply = function.apply("構造器");
    }

    上次說過 Function<T,R> 接受一個 T 參數 返回一個 R 參數,所以 可以用作有參構造函數的調用 如果 想調用無參構造函數   則 可以使用 :

    Supplier<User> supplier = User::new;
    User user = supplier.get();

  3. ::調用 實例方法,其實 調用實例方法 個人覺得沒有必要這樣搞了

    User user1=new User();
            Consumer<String> consumer1=    user1::disName;
            consumer1.accept("實例方法調用");

     

  4. 1.8里面的API 其實還是挺多的,我沒有一個個去看完嘗試完,但是 應該是能舉一反三的,只要會用  理解了 只是 換個需求 換個參數,學習 一定要活學活用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM