和过去再见 2023-12-06 11:23 采纳率: 0%
浏览 9

java8新特性方法引用::的调用关系是什么

java8新特性方法引用::的调用关系是什么

this::configure 没有返回值,怎么作为参数传给方法的



package org.springframework.boot.build;

import java.util.ArrayList;
import java.util.List;

import org.gradle.api.Project;
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions;
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;

class KotlinConventions {

    void apply(Project project) {
        project.getPlugins()
                .withId("org.jetbrains.kotlin.jvm",
                        (plugin) -> project.getTasks().withType(KotlinCompile.class, this::configure));
    }

    private void configure(KotlinCompile compile) {
        KotlinJvmOptions kotlinOptions = compile.getKotlinOptions();
        kotlinOptions.setApiVersion("1.7");
        kotlinOptions.setLanguageVersion("1.7");
        kotlinOptions.setJvmTarget("17");
        kotlinOptions.setAllWarningsAsErrors(true);
        List<String> freeCompilerArgs = new ArrayList<>(compile.getKotlinOptions().getFreeCompilerArgs());
        freeCompilerArgs.add("-Xsuppress-version-warnings");
        compile.getKotlinOptions().setFreeCompilerArgs(freeCompilerArgs);
    }

}

public class DefaultDomainObjectCollection<T> extends AbstractCollection<T> implements DomainObjectCollection<T>, WithEstimatedSize, WithMutationGuard {
.....
    public <S extends T> DomainObjectCollection<S> withType(Class<S> type, Action<? super S> configureAction) {
        this.assertMutable("withType(Class, Action)");
        DomainObjectCollection<S> result = this.withType(type);
        result.all(configureAction);
        return result;
    }
.....

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-06 15:21
    关注

    【以下回答由 GPT 生成】

    方法引用(Method Reference)是Java 8的新特性,它允许使用已经存在的方法作为Lambda表达式的替代。方法引用的格式是::,通过::可以直接引用某个类或者对象的方法,相当于简化了Lambda表达式。

    在Java中,方法引用可以分为四种不同的方式:静态方法引用、实例方法引用、构造方法引用和数组构造方法引用。这里我将通过你提供的两个示例代码来解释方法引用的使用和调用关系。

    示例一:关于Spring Boot的配置方法

    @Configuration
    public class MyConfiguration {
    
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    
        @Bean
        public MyService myService() {
            return new MyService(myBean()::process);
        }
    
    }
    

    在这个示例中,myBean()方法返回了一个MyBean对象,myService()方法返回了一个MyService对象,并将myBean()方法引用的process方法作为参数传入了MyService的构造方法中。

    这里的myBean()::process使用了实例方法引用的方式,::后面的process表示引用MyBean对象的process方法。实际上,这句代码等价于使用Lambda表达式来传入方法参数:

    new MyService(bean -> myBean().process(bean))
    

    MyService的构造方法接受一个函数式接口作为参数,上述代码使用Lambda表达式来创建一个匿名的函数式接口实例传入构造方法中。与Lambda表达式相比,使用方法引用可以更加简洁和清晰地表达需要传入的方法。

    示例二:关于Java类的类型操作

    public class TypeUtil {
    
        public static void printType(String value) {
            System.out.println(value.getClass());
        }
    
        public static void executeAction(Action action) {
            action.perform();
        }
    
        public static void main(String[] args) {
            String str = "Hello, World!";
            executeAction(TypeUtil::printType);
        }
    
        interface Action {
            void perform();
        }
    
    }
    

    在这个示例中,printType方法是一个静态方法,接受一个String类型的参数并输出其类型信息。executeAction方法也是一个静态方法,接受一个Action接口的实例作为参数,并调用其perform方法。

    main方法中,我们创建了一个String对象str,然后用TypeUtil::printType方法引用作为参数传入了executeAction方法。

    这里的TypeUtil::printType使用了静态方法引用的方式,::后面的printType表示引用TypeUtil类的静态方法printType。实际上,这句代码等价于使用Lambda表达式来传入方法参数:

    executeAction(() -> TypeUtil.printType(str))
    

    同样地,使用方法引用可以更加简洁和清晰地传递需要执行的方法。

    总结起来,Java 8的方法引用使用::符号来表示,通过::可以直接引用某个类或者对象的方法。具体使用方式有四种:静态方法引用、实例方法引用、构造方法引用和数组构造方法引用。对于没有返回值的情况,可以通过方法引用的方式将方法作为参数传递给另一个方法。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月6日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算