3.3 方法引用

方法引用是Lambda表达式的一种简化形式,用于直接使用已存在的方法。它适用于函数式接口,要求接口的抽象方法与引用方法的参数列表和返回类型匹配。方法引用分为类引用实例方法、对象引用实例方法、类引用静态方法和类引用构造方法四种类型。示例代码展示了如何在不同场景下使用方法引用。

1.简介
(1).概念
方法引用本质上就是Lambda表达式,Lambda表达式是函数式接口的实例,所以说方法引用也是函数式接口的实例。

(2).使用场景
当要传递给Lambda体的操作,已经有实现的方法了,就可以使用方法引用。

(3).使用条件
接口中的抽象方法的形参列表和返回值类型与方法引用的方法形参列表和返回值相同。

2.语法
方法引用使用一对冒号(::)来引用方法,格式如下。

类或对象 :: 方法名

3.使用实例
(1).类引用实例方法

public class Test {
    public static void main(String[] args) {
        //类引用实例方法,compareTo()为实例方法
        Comparator<String> comparator = String::compareTo;
        int compare = comparator.compare("Hello", "Hello");
        System.out.println(compare);
    }
}

(2).对象引用实例方法

public class Test {
    public static void main(String[] args) {
        Consumer<String> consumer = System.out::println;
        consumer.accept("只消费,不返回");
    }
}

(3).类引用静态方法

public class Test {
    public static void main(String[] args) {
        //类引用静态方法(compare()为静态方法)
        Comparator<Integer> comparator = Integer::compare;
        System.out.println(comparator.compare(12, 11));
    }
}

(4).类引用构造方法

public class Test {
    static class Person {
        private String name;

        public Person() {
            System.out.println("无参数构造方法执行了");
        }

        public Person(String name) {
            System.out.println("单参数构造方法执行了");
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }


    public static void main(String[] args) {
        //使用Lambda表达式,调用无参构造方法
        Supplier<Person> supplier1 = () -> new Person();
        supplier1.get();

        //使用方法引用,引用无参构造方法
        Supplier<Person> supplier2 = Person::new;
        supplier2.get();

        //使用Lambda表达式,调用单参构造方法
        Function<String, Person> function1 = name -> new Person(name);
        Person person1 = function1.apply("小慕");
        System.out.println(person1.getName());
        
        //使用方法引用,引用单参构造方法
        Function<String, Person> function2 = Person::new;
        Person person2 = function1.apply("小明");
        System.out.println(person2.getName());
    }
}
在使用 IntelliJ IDEA 时,如果遇到方法无法被正确引用或识别的问题,可能的原因包括代码错误、项目配置问题、索引异常或插件冲突等。以下是详细的解决方案和排查步骤: ### 3.1 检查代码语法与导入语句 确保方法的声明和调用位置正确,并且类之间的引用没有遗漏必要的 `import` 语句。特别是在多模块项目中,包结构复杂时容易出现导入错误。 ```java // 示例:确保调用类中正确导入了包含目标方法的类 import com.example.utils.StringUtils; ``` 如果存在拼写错误、参数类型不匹配或访问权限问题(如 `private` 方法在外部调用),也会导致方法无法识别[^2]。 ### 3.2 刷新项目索引 IntelliJ IDEA 依赖索引来提供代码补全、导航和引用解析功能。当索引损坏或未更新时,可能导致方法无法被识别。 - 可尝试通过菜单 **File > Invalidate Caches / Restart** 来清除缓存并重建索引。 - 该操作将清除本地缓存并重新索引整个项目,通常能解决由索引异常引起的识别问题[^1]。 ### 3.3 检查项目 SDK 和模块设置 确保项目 SDK 配置正确,且所有模块都已正确关联所需的依赖库。 - 打开 **File > Project Structure**,检查 SDK 是否设置为合适的版本。 - 确保模块的 `Dependencies` 标签页中包含了所需库或模块依赖。 - 若使用 Maven 或 Gradle 构建工具,执行 `mvn clean install` 或 `gradle build` 并重新导入项目可刷新依赖状态[^3]。 ### 3.4 重新加载或同步构建文件 对于使用 Maven 或 Gradle 的项目,若构建文件(如 `pom.xml` 或 `build.gradle`)发生更改但未同步,IDEA 可能无法识别新加入的类或方法。 - 在 Maven 项目中点击右侧 Maven 工具栏中的 **Reimport** 按钮。 - 对于 Gradle 项目,点击 **Refresh** 按钮以重新加载依赖和模块配置[^1]。 ### 3.5 禁用插件排查冲突 某些第三方插件可能干扰代码分析引擎,导致方法识别失败。 - 进入 **Settings > Plugins**,临时禁用非官方插件。 - 重启 IDEA 后观察问题是否消失,以此判断是否存在插件冲突[^2]。 ### 3.6 检查作用域与可见性 如果方法定义在另一个类或包中,需确认其访问修饰符是否允许跨类或跨包访问。 - 使用 `public` 或 `protected` 修饰符以确保方法可在其他类中被访问。 - 对于内部类或静态方法,也应确保调用方式符合语言规范[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值