java1.8新特性(三 关于 ::的用法)

时间:2023-01-02 17:53:57

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);

    }

    java1.8新特性(三 关于 ::的用法)
    这里 既然 既然 已经帮我们提供了接口  没有必要的话 直接 用 就可以了。。当然 也可以 自己 定义一个 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 其实还是挺多的,我没有一个个去看完尝试完,但是 应该是能举一反三的,只要会用  理解了 只是 换个需求 换个参数,学习 一定要活学活用