首页 > 编程语言 >Java [ 基础 ] 方法引用 ✨

Java [ 基础 ] 方法引用 ✨

时间:2024-07-05 16:55:16浏览次数:25  
标签:Java String System 引用 println 方法 public

✨探索Java基础✨

Java基础:方法引用

方法引用是Java 8中引入的一种新特性,它使得代码更加简洁和易读。方法引用提供了一种可以直接引用已有方法作为Lambda表达式的替代方案。本文将深入介绍方法引用的基本概念、使用方法、具体实例及其在实际开发中的应用。

什么是方法引用?

方法引用是一种可以直接引用或调用现有方法的简洁语法。它的语法格式是ClassName::methodName。方法引用的主要目的是为了减少Lambda表达式的冗余代码,使代码更加清晰和简洁。通过方法引用,我们可以避免一些重复代码,使代码更加模块化和易于维护。

方法引用的四种类型
  1. 引用静态方法
  2. 引用实例方法
  3. 引用对象的方法
  4. 引用构造器

我们将通过详细示例介绍每一种方法引用的使用。

1. 引用静态方法

静态方法引用使用语法:ClassName::methodName。例如:

import java.util.function.Function;

public class StaticMethodReference {
    public static void main(String[] args) {
        // 使用方法引用引用Integer类的静态方法parseInt
        Function<String, Integer> stringToInteger = Integer::parseInt;
        // 调用apply方法将字符串"123"转换为整数
        Integer result = stringToInteger.apply("123");
        // 输出结果:123
        System.out.println(result); 
    }
}

在这个示例中,Integer::parseInt是对Integer类的静态方法parseInt的引用。这种引用方式非常适用于将现有的静态方法转换为函数式接口实例。

2. 引用实例方法

实例方法引用使用语法:instance::methodName。例如:

import java.util.function.Consumer;

public class InstanceMethodReference {
    public static void main(String[] args) {
        // 定义一个字符串
        String str = "Hello, World!";
        // 使用方法引用引用System.out对象的println方法
        Consumer<String> printer = System.out::println;
        // 调用accept方法输出字符串
        printer.accept(str); // 输出:Hello, World!
    }
}

在这个示例中,System.out::println是对System.out对象的实例方法println的引用。这种方式非常适用于现有对象的实例方法。

3. 引用特定对象的方法

特定对象的方法引用使用语法:ClassName::methodName。例如:

import java.util.function.BiFunction;

public class ObjectMethodReference {
    public static void main(String[] args) {
        // 使用方法引用引用String类的实例方法equals
        BiFunction<String, String, Boolean> stringEquals = String::equals;
        // 调用apply方法比较两个字符串是否相等
        Boolean result = stringEquals.apply("test", "test");
        // 输出结果:true
        System.out.println(result); 
    }
}

在这个示例中,String::equals是对String类实例方法equals的引用。这种方式适用于将类的实例方法转换为函数式接口。

4. 引用构造器

构造器引用使用语法:ClassName::new。例如:

import java.util.function.Function;

class Person {
    private String name;

    // 定义一个构造器
    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "'}";
    }
}

public class ConstructorReference {
    public static void main(String[] args) {
        // 使用方法引用引用Person类的构造器
        Function<String, Person> personCreator = Person::new;
        // 调用apply方法创建一个Person对象
        Person person = personCreator.apply("John");
        // 输出结果:Person{name='John'}
        System.out.println(person); 
    }
}

在这个示例中,Person::new是对Person类构造器的引用。这种引用方式非常适用于工厂方法模式,可以创建对象的实例。

方法引用与Lambda表达式的对比

方法引用是Lambda表达式的一种简化形式,但两者有很多相似之处。方法引用的语法更加简洁,可以直接引用现有的方法,而Lambda表达式需要定义一个匿名函数。例如:

使用Lambda表达式:

// 使用Lambda表达式将字符串转换为整数
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);

使用方法引用:

// 使用方法引用将字符串转换为整数
Function<String, Integer> stringToInteger = Integer::parseInt;

可以看出,方法引用使代码更加简洁,不需要再编写Lambda表达式中的参数和方法调用。

方法引用的优势
  1. 简洁性:方法引用可以使代码更简洁,减少不必要的Lambda表达式。
  2. 可读性:方法引用使代码更易读,开发者可以更容易理解代码的意图。
  3. 重用性:通过方法引用,可以直接重用已有的方法,而不需要再编写一遍逻辑。
实际应用中的方法引用

在实际开发中,方法引用可以用于各种场景,例如:

  • 集合操作:使用方法引用可以简化集合操作中的代码。例如,排序操作可以使用方法引用简化代码。

    import java.util.Arrays;
    import java.util.List;
    
    public class CollectionExample {
        public static void main(String[] args) {
            // 创建一个字符串列表
            List<String> names = Arrays.asList("John", "Jane", "Tom", "Alice");
            // 使用方法引用对列表进行排序
            names.sort(String::compareToIgnoreCase);
            // 输出结果:[Alice, Jane, John, Tom]
            System.out.println(names); 
        }
    }
    

  • 流操作:在流操作中,方法引用可以使代码更加简洁。

     
    import java.util.Arrays;
    import java.util.List;
    
    public class StreamExample {
        public static void main(String[] args) {
            // 创建一个字符串列表
            List<String> names = Arrays.asList("John", "Jane", "Tom", "Alice");
            // 使用方法引用将列表中的字符串转换为大写并输出
            names.stream()
                 .map(String::toUpperCase)
                 .forEach(System.out::println); // 输出:JOHN, JANE, TOM, ALICE
        }
    }
    

  • 线程操作:使用方法引用可以简化线程操作中的代码。

     
    public class ThreadExample {
        public static void main(String[] args) {
            // 使用方法引用创建并启动一个新线程
            new Thread(System.out::println).start();
        }
    }
    

总结

方法引用是Java 8引入的一个强大特性,使得代码更加简洁和易读。通过四种类型的方法引用,我们可以引用静态方法、实例方法、对象的方法以及构造器。

在实际开发中,合理使用方法引用可以提高代码的可维护性和重用性。希望通过本文的介绍,你能更好地理解和应用Java中的方法引用特性,为你的开发工作带来便利。

觉得有用的话可以点点赞 (*/ω\*),支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

标签:Java,String,System,引用,println,方法,public
From: https://blog.csdn.net/jgk666666/article/details/140099744

相关文章

  • java List集合排序方式
    javaList集合排序方式1.使用直接上代码packagecom.demo;importcn.hutool.core.date.DateTime;importlombok.AllArgsConstructor;importlombok.Data;importjava.util.*;importjava.util.stream.Collectors;publicclassDemoCollectionsSortMain{public......
  • Collection接口和常用方法
    Collection接口实现类的特点publicinterfaceCollection<E>extendsIterable<E>collection实现子类可以存放多个子元素,每个元素可以是Object有些Collection的实现类,可以存放时能够重复的元素,有些不行有些Collection的实现类是有序的(List),有些不是(Set)Collection接口没有直接......
  • C#的学习基础篇(3)——字符串的常见方法
    目录1.字符串的常见方法    1.1Format         1.2IsNullOrEmpty        1.3IsNullOrWhiteSpace        1.4Equals        1.5Contains        1.6Length        1.7 Substring        1.8......
  • Linux 运行时调用动态链接库的方法
    项目场景:Linux动态链接库调用自定义的动态链接库动态链接库:(1)编写.c和.h文件(2)将.c文件转成.o文件gcc-c*.c-fPIC(3)将.o文件转成动态库文件lib库名.sogcc-shared-olib库......
  • 【Stable Diffusion】2个实用方法---去除AI绘画的油腻感
    虽然现在AI绘画的技术已经相对比较成熟,能做出很多以假乱真的照片,但AI绘画似乎还是有点“人工”的“油腻感”。本文想讨论一下,降低AI绘画“油腻感”的方法。AI的油腻感?Midjourney的V6版本,虽然已经能产出媲美“专业摄影”效果的图片,但还是有一股“AI味”。当然,这......
  • Java EE改名Jakarta EE,jakarta对程序的影响
    一、前言很多Java程序员在使用新版本的Spring6或者springboot3版本的时候,发现了一些叫jakarta的包。我在阅读开源工作流引擎camunda源代码的时候,也发展了大量jakarta的工程包。比如:camunda的webapps编译工程就提供了2种方式javax和jakarta*`assembly`-Javasourcesandtes......
  • 如何将pdf转成html?PDF转HTML网页的3个方法
    怎么把pdf转化成html?我们在查看一些文件的时候会遇到查看失败或是无法打开的情况,发送的时候也可能会出现这样或那样的问题,其实我们可以将PDF文件转换成HTML格式,在该格式下文件打开和加载的速度很快,而且能不受到软件的制约,直接在网页上就能查看,与此同时还能方便文件的共享访问,只需......
  • 基于javaweb二手闲置物品在线交易平台系统作品成品
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • Golang: 解引用 赋值 时发生了什么
    Golang:解引用赋值时发生了什么示例代码packagemainimport"fmt"typeComplexStructstruct{ Aint Bstring Cfloat64 Dbool E[]int Fmap[string]string G*ComplexStruct}funcmain(){ com1:=ComplexStruct{ A:1, B:"com1", C:3......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript学校网站(成都大学)
    HTML+CSS+JS【学校网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......