zoukankan      html  css  js  c++  java
  • 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 其实还是挺多的,我没有一个个去看完尝试完,但是 应该是能举一反三的,只要会用  理解了 只是 换个需求 换个参数,学习 一定要活学活用
  • 相关阅读:
    Maven 环境的配置
    zTree的简单例子
    plsql免安装客户端的配置
    HDU 1232 畅通工程
    HDU 5698 瞬间移动
    Codeforces 1015E1 Stars Drawing (Easy Edition)
    Codeforces 784B Santa Claus and Keyboard Check
    Codeforces 500C New Year Book Reading
    NSarray 赋值 拷贝 等问题记录
    UINavigationController 操作记录
  • 原文地址:https://www.cnblogs.com/920913cheng/p/10216072.html
Copyright © 2011-2022 走看看