java1.8新特性(三 关于 ::的用法)
java1.8 推出了一种::的语法 用法 身边 基本没人用1.8的新API 目前 我也是只处于学习 运用 阶段 有点 知其然不知其所以然 通过后面的学习,及时查漏补缺
一个类中 有 静态方法 ,非静态方法,构造方法
- :: 操作静态方法
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 的接口 - ::操作 构造方法
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(); - ::调用 实例方法,其实 调用实例方法 个人觉得没有必要这样搞了
User user1=new User(); Consumer<String> consumer1= user1::disName; consumer1.accept("实例方法调用");
- 1.8里面的API 其实还是挺多的,我没有一个个去看完尝试完,但是 应该是能举一反三的,只要会用 理解了 只是 换个需求 换个参数,学习 一定要活学活用