首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【lambda】java中的引用

【lambda】java中的引用

作者头像
master336
发布2026-06-15 19:47:21
发布2026-06-15 19:47:21
910
举报
目录

  • 定义
  • 方法引用
    • 对象::实例方法名
    • 类::静态方法名
    • 类::实例方法名
  • 构造器引用
  • 数组引用

定义

方法引用: 可以看作lambda表达式深层次的表达,方法引用作为函数式接口的一个实例,可通过方法名来指向方法;可认为是lambda表达式的一个语法糖。 语法格式: 使用操作符 :: 将类/对象与方法名分割开。 使用场景:

  1. 对象::实例方法名
  2. 类::静态方法名
  3. 类::实例方法名

注意: 前两种场景下接口中抽象方法的形参列表和返回值要与方法引用的形参列表和返回值类型相同

方法引用

举例:Consumer consumer1 = System.out::println;

对象::实例方法名

代码语言:javascript
复制
@Test
 public void test6(){
      // 获取对象
      PrintStream obj = System.out;
      // 引用对象实例方法
      Consumer<String> consumer1 = obj::println;
      HashMap<String, String> map = new HashMap<>();
      IntSupplier intSupplier = map::size;
  }

类::静态方法名

代码语言:javascript
复制
@Test
 public void test8() {
      Comparator<Integer> comparator = (a, b) -> {
          return Integer.compare(a, b);
      };
      Comparator<Integer> comparator1 = Integer::compare;
      comparator.compare(1, 2);
  }

类::实例方法名

适用于第一个参数作为调用对象,参数二开始为调用参数。

代码语言:javascript
复制
// 一个入参
@Test
public void test7() {
   Comparator<String> comparator = String::compareTo;
     Comparator<String> comparator1 = (a, b) -> a.compareTo(b);
     comparator.compare("a", "b");
 }
代码语言:javascript
复制
// 多入参例子
@FunctionalInterface
interface LambdaI<T> {
   T test(T s1,T s2,T s3);
}
class LambdaD{
   LambdaD test(LambdaD s1,LambdaD s2){
       return new LambdaD();
   }
}
class Demo{
   @Test
   public void test9(){
       LambdaI<LambdaD> result = new LambdaI<LambdaD>() {
           @Override
           public LambdaD test(LambdaD s1, LambdaD s2,LambdaD s3) {
               return s1.test(s1, s2);
           }
       };
       LambdaI<LambdaD> result1 = LambdaD::test;
   }
}

构造器引用

与方法引用类似,函数式接口抽象方法的形参列表与构造器形参列表一致,返回值为构造器所属类的类型时 类 :: new

代码语言:javascript
复制
@Test
 public void test10(){
     Supplier<HashMap> supplier = HashMap::new;
     Function<String,TestClass> frmo = TestClass::new;
 }
 class TestClass{
     private String name;
     public TestClass(String name) {
         this.name = name;
     }
 }

数组引用

数组引用是构造器引用的一种,相当于将数组看作一个特殊的类。

代码语言:javascript
复制
@Test
 public void test11(){
    Function<Integer,Object[]> function = Object[] :: new;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 定义
  • 方法引用
    • 对象::实例方法名
    • 类::静态方法名
    • 类::实例方法名
  • 构造器引用
  • 数组引用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档